บทเรียนกับ stored procedure บน mysql

stored procedure
stored procedure

บทเรียนกับ stored procedure บน mysql
1. ทดสอบกับ MySQL server
version 5.5.16 ใน thaiabc.com 8.0
2. เดิม start mysql ด้วย DOS>mysqld.exe –console
แต่พบปัญหาขณะ call procedure ว่า
ERROR 1436 (HY000): Thread stack overrun:  6892 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use ‘mysqld –thread_stack=#’ to specify a bigger stack.
3. แก้ไขโดย start mysql ด้วย DOS>mysqld.exe –console –thread_stack=999999

4. สร้าง procedure
use test;
delimiter //
create procedure x01()
begin
select * from student;
end//
delimiter ;
grant execute on procedure test.x01 to ”@’localhost’;
call x01();

5. สร้าง function
create function addhead(s char(20))
returns char(50) deterministic
return concat(‘- ‘,s,’!’);
select addhead(sname) from student;

6. คำสั่งที่น่าสนใจ
show create procedure xxx;
drop procedure xxx;
show procedure status;
show function status;
help show;
show procedure status where Db = DATABASE() and type = ‘PROCEDURE’;
select * from mysql.proc;
select * from information_schema.routines;

7. web guides
http://devzonedd.designweb2you.com/viewthread.php?tid=82 ***
http://code.function.in.th/sqlserver/stored-procedure ***
http://www.mssqltips.com/sqlservertutorial/160/sql-server-stored-procedure/
http://msdn.microsoft.com/en-us/library/aa174792(v=sql.80).aspx
http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx
http://dev.mysql.com/doc/refman/5.1/en/stored-routines.html
http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

มูดเดิ้ลล้ม แล้วย้ายเครื่อง ออกอาการสตาร์ทไม่ติด

can not start moodle
can not start moodle
การติดตั้ง moodle 2.1 ขึ้นไป
ต้องใช้ PHP 5.3.2 เป็นขั้นต่ำ
อย่างเครื่องที่ใช้ PHP 5.2.6 ถ้ามีการปิดระบบ หรือย้ายเครื่อง
อาจพบปัญหานี้ได้ ก็แก้ไขโดยเปลี่ยนรุ่นของ php
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
in C:\Appserv\www\_class\lib\accesslib.php on line 5288
แล้วอย่าลืมว่า mysql ก็ต้อง MySQL 5.0.25 ขึ้นไป
อย่างเครื่องบริการเครื่องหนึ่งเป็น php 4 + mysql 4
ก็ต้องเลือก moodle 1.9 เพราะ 2.2 ต้องการมากกว่าที่มี
แต่ถ้าเป็นเครื่องที่ควบคุมได้ ก็ลงไปเลย php5.3 + mysql5.0
แล้วการใช้ appserv ก็เป็นอะไรที่สะดวกสบายยิ่ง
.. confirm

ตัวอย่างการเชื่อม vs.net + console + winapp + mysql + xampp + mysql connector

vs.net + console + winapp + mysql + xampp + mysql connector
vs.net + console + winapp + mysql + xampp + mysql connector

ตัวอย่างมีโปรแกรม 2 ส่วน ที่แสดงความสัมพันธ์ของการทำงานกับส่วนต่าง ๆ ที่เชื่อมโยงกัน ได้แก่ vs.net + console application + class library + winapp + mysql + xampp + mysql connector ประกอบด้วย
1. solution ที่เป็น class library มี method ทำงานกับ mysql ในการ insert, delete, update, select
โดยรองรับการทำงานแบบ console และนำไปใช้งานบน windows forms application
http://www.thaiall.com/vsnet/mysql_sidu2.zip
2. solution ที่เป็น windows forms application มีฟอร์มเรียกใช้ class ใน class library เชื่อมต่อกับ mysql
http://www.thaiall.com/vsnet/mysql_form2.zip

ขั้นตอน และโปรแกรมที่จำเป็นต้องติดตั้งเพื่อใช้งาน solution ทั้ง 2 ข้างต้น

1. ติดตั้ง vs.net 2010
http://msdn.microsoft.com/en-us/library/dd831853%28v=vs.100%29.aspx
2. ติดตั้ง mysql connector .net เพื่อการเชื่อมต่อกับ mysql
http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-6.5.4.msi/from/http://cdn.mysql.com/
12.8 MB
3. ติดตั้ง xampp เพื่อบริการ mysql
http://www.apachefriends.org/download.php?xampp-win32-1.8.1-VC9-installer.exe
99 MB
4. คลาย .zip ทั้ง 2 solution ใน c:\ แบบ extract here
5. start mysql ใน xampp
6. เปิด c:\mysql_sidu2\mysql_sidu2.sln
7. เปลี่ยน application type เป็น console application
8. กด F5 = Start Debugging แล้ว กด s,1,10 คนละบรรทัดครับ เพื่อทดสอบ
9. เปิด c:\mysql_form2\mysql_form2.sln
10. กด F5 = Start Debugging เพื่อทดสอบ insert, delete, update, select

บทเรียนเกี่ยวกับ apache

6 ก.พ.55 มีบทเรียนด้านคอมพิวเตอร์มาฝาก 2 เรื่อง
เกี่ยวกับ apache web server (ใช้ appserv)
1. พบคำว่า “Could not connect to the database”
ในหน้าแรกของ wordpress หลังจากปรับระบบนิดหน่อย ซึ่งเดิมใช้งานได้ปกติ
ปัญหานี้เกิดรหัสผ่านเข้า mysql ใน wp-config.php ไม่ตรงกับที่กำหนดไ…ว้
สรุปว่า รหัสของ mysql ไม่ถูกต้อง (หลายมือครับ)

2. เครื่องบริการหนึ่งเครื่องมี ip จำนวน 2 เบอร์
ต้องการให้เบอร์หนึ่งชี้ไปที่ host ตัวหนึ่ง และอีกตัวชี้ไปที่ host อีกตัว
จึงต้องกำหนด virtual host ใน httpd.conf

NameVirtualHost 10.10.10.10
<VirtualHost 10.10.10.10>
ServerAdmin burin_ruj@nation.ac.th
DocumentRoot C:\www\class
ServerName class.nation.ac.th
</VirtualHost>

ใช้บล็อกเป็นโน๊ตย่อ หรือบันทึกช่วยจำ เรื่องการเขียน sql

8 มี.ค.54 มีโอกาสจัดการข้อมูลประมาณมาก กับหลายตารางที่มีโครงสร้างต่างกัน
พบว่าคำสั่ง delete กับ truncate ให้ผลใกล้เดียงกันคือ clear ข้อมูลที่เคยทดสอบออกหมด แต่ truncate จะทำให้ auto_increment เริ่มต้นจาก 1 มิใช่ต่อจากเลขเดิมที่เคยมีในตารางนั้น
ส่วนคำสั่งเพิ่มข้อมูลหลายระเบียนเดิมใช้
insert into behavior (bid,bname) values (1,’tom’);
insert into behavior (bid,bname) values (2,’boy’);
แบบใหม่เขียนสั้นลงคือ
insert into behavior (bid,bname) values (1,’tom’), (2,’boy’);
ส่วนการแก้ไขข้อมูลหลายเขตข้อมูลจะใช้ , หลัก set แต่ใช้ and หลัง where
เช่น
update behavior set bsex=0, bname=’jack’ where bid=1 and bgroup=2

ตัวอย่างการ clear ข้อมูลก่อนเปิดใช้จริง
delete from administration;
truncate administration;
truncate behavior;
truncate favorite;
truncate president;
truncate rart;
truncate rart_d;
truncate rdevelop;
truncate rdevelop_d;
truncate reval;
truncate rexecutive;
truncate rexecutive_d;
truncate rother;
truncate rother_d;
truncate rpublish;
truncate rpublish_d;
truncate rresearch;
truncate rresearch_d;
truncate rservice;
truncate rservice_d;
truncate rteaching;
truncate rteaching_d;
truncate ryour;
truncate ryour_d;
truncate salary;

การเตรียมข้อมูลไปประมวลผลใน MySQL

การใช้ excel เตรียมข้อมูลสำหรับ mysql
การใช้ excel เตรียมข้อมูลสำหรับ mysql

6 มี.ค.54 ต.ย. การใช้ excel จัดการข้อมูลเป็น SQL Command ก่อนส่งไปประมวลผลในเครื่องบริการ
– เมื่อกรอกข้อมูลใน excel แล้ว เขียนสูตรสร้าง SQL Command แล้วคัดลอก SQL Command ไปประมวลผล
– ตัวอย่างนี้มีตารางชื่อ friends และในตารางมีเขตข้อมูล 3 ระเบียน

http://www.thaiall.com/mysql
http://www.thaiall.com/office

ทดสอบ ajax กับ mysql พบปัญหาคำว่า form ผ่าน div

14 ก.ย.53 วันนี้ ปิดงานไม่ลง เพราะทดสอบการใช้ mysql update ในฟอร์มแบบ interactive แล้วทำงานร่วมกับ ajax กว่าจะพบว่า ส่งผลที่มีคำว่า form เข้าผ่าน div แล้วเป็นเหตุให้ไม่แสดงผล ก็ดึกพอดี จะแก้โปรแกรมต้นโค้ด 9137 ก็ไม่มีสมาธิซะแล้ว .. พักยกก่อนครับวันนี้ พบเหตุของปัญหาแล้วเพียงแต่ไม่ได้ปรับปรุงใหม่ทั้งชุด ให้ทำงานร่วมกับ ajax ที่สมบูรณ์แล้ว up เข้า thaiall.com/ajax เท่านั้น
ต้นโค้ดจาก http://www.thaiall.com/perlphpasp/source.pl?9137

แก้ปัญหาไม่แสดงชื่อนักศึกษาใน moodle

23 ส.ค.53 รับแจ้งจากหัวหน้าว่า รายชื่อนักศึกษาในระบบ e-learning ที่ใช้สคริปต์ของ Moodle หายไปหมด และงานนักศึกษาก็ยังตรวจไม่เรียบร้อย ผมจึงตั้งสมมติฐานว่าตารางหนึ่งในระบบฐานข้อมูลเสียอีกแล้ว เคยเกิดขึ้น และใช้โปรแกรม EMS  SQL Manager for MySQL เข้าไป Repair แต่ครั้งนี้ผมจะเปลี่ยนวิธี เพราะระบบฐานข้อมูล MySQL มีโปรแกรมที่สามารถซ่อมผ่าน Command Line จึงไม่ใช้โปรแกรมเสริมจากภายนอกอย่าง EMS

เข้า MySQL ผ่าน Command Line แล้ว use moodle; (แต่ไม่มีคำสั่งตรวจสอบตารางทั้งหมดอัตโนมัติ ถ้าจะเขียน php หรือ Shell script ก็จะยุ่งยากมากไป) จึงใช้ show tables; แล้วคัดลอกรายชื่อตารางไปไว้ใน notepad แล้วแทนที่สัญลักษณ์ | ด้วยสัญลักษณ์ , เนื่องจากคำสั่ง check table สามารถตรวจตารางพร้อมกันได้หลายตารางโดยใช้เครื่องหมาย , ขั้นระหว่างชื่อตาราง ผมจึงคัดลอกข้อมูลจาก notepad มาวางต่อคำสั่ง check table ก็พบตารางที่ error แบบ  corrupt มีจำนวน 2 ตาราง คือ  mdl_log และ mdl_user_students เมื่อสั่ง repair table mdl_user_students; ก็พบว่า moodle กลับมาแสดงรายชื่อนักศึกษาได้ตามปกติ
+ http://www.thaiall.com/mysql

ทดสอบโปรแกรม thaiabc.com รุ่น 6.5 กับการประมวลผลบน DVD

1 เม.ย.53 โปรแกรมแก้วสารพัดนึก คือ โปรแกรมที่ช่วย ติดตั้งเครื่องบริการเว็บ เครื่องบริการฐานข้อมูล โอเพนซอร์ส และรวมบทความมากมาย สำหรับนำไปเรียนรู้ได้ด้วยตนเอง หลังติดตั้งเสร็จจะได้โปรแกรม Apache + PHP + MySQL + Perl + Script เช่น e-Commerce, e-Learning, CMS, Article และ Source Code
     วันนี้เขียน software หลายร้อยโปรแกรมลง DVD หลายแผ่นไว้แจกนักศึกษาในชั้นเรียน ในนั้นมีโปรแกรม thaiabc.com แบบ no install ให้ประมวลผล apache + php + mysql ที่ใครเรียกว่าโปรแกรมประเภท WAMP จากการแก้ไขให้ run mysql แบบไม่ใช้ innodb พบว่า wordpress สามารถ run ผ่าน CD-ROM ได้ทันทีใช้ admin เข้าระบบก็ได้ เพราะการอ่าน blog ที่วางไว้สองร้อยกว่าเรื่องไม่มีการเก็บ log ของการอ่านไว้ในฐานข้อมูล  ส่วน learnsquare v2 ก็ไม่พบปัญหาแม้จะ login ด้วย admin ก็ใช้งานผ่าน DVD ได้ปกติ ส่วน phpmyadmin พบว่าสามารถเข้าดูข้อมูลใน mysql ได้ วันนี้คุณสามารถ download ชุดติดตั้งโปรแกรมแก้วสารพัดนึกจาก thaiabc.com ได้แล้ว 1) เมื่อติดตั้งแล้วก็ใช้งานใน Drive C 2)เลือกที่จะคัดลอกไปวางใน DVD หรือ CD ซึ่งเก็บข้อมูลได้มากและราคาถูก 3)เลือกที่จะคัดลอกไปวางไว้ใน Thumb Drive เพื่อใช้งานได้ในทุกที่
     แต่ moodle พบ error message เพราะมีการเขียน session ส่วน mambo มีการ insert เข้าฐานข้อมูลพบ error ส่วน oscommerce มีการ insert เข้าตาราง session พบ error ส่วน gallery ก็ใช้งานไม่ได้พบ error ส่วน phpbb3 ก็ใช้งานไม่ได้พบ error .. สรุปว่าผลการทดสอบกับ DVD ซึ่งเป็นสื่อเก็บข้อมูลแบบอ่านอย่างเดียว ถือเป็นปัญหาที่ไม่ใหญ่นัก เนื่องจากคาดไว้แล้ว แต่การใช้งานจริงก็จะใช้ผ่าน USB Drive หรือ Flash Drive เพราะเป็นอุปกรณ์ที่อ่านเขียนได้ ราคาถูกลงมาก และทำงานได้เร็วกว่า DVD แน่นอน .. ดังนั้นทุกบริการจึงทำงานได้ทั้งหมด

เก็บ log ของผู้ใช้ระบบอินทราเน็ตไม่เข้า

สถิติ และข้อมูลผู้ใช้ล่าสุด

19 ม.ค.53 เมื่อ 2 วันก่อนคือวันอังคารที่ผ่านมา พบปัญหาว่า อ.อติชาต หาญชาญชัย เข้าสู่ระบบอินทราเน็ต (เป็นผู้ทดสอบที่ไม่ได้มาจากการรับบันทึกเชิญชวนบุคลากรของมหาวิทยาลัยให้เข้าทดสอบระบบ แต่มาจากการบอกต่อของบุคลากร) สิ่งที่พบคือไม่แสดงข้อมูลการเข้าใช้ในระบบเก็บ log และจำนวนผู้ใช้หยุดที่จำนวน 27 คนเท่านั้น จึงแจ้งไปยังคุณธรณินทร์ สุรินทร์ปันยศ ว่าเกิดอะไรขึ้น มีการปรับข้อมูลอะไรหรือไม่ เพราะข้อมูลล่าสุดเป็นของวันที่ 15 ม.ค.53 แล้วผมก็เห็นกับตาว่าท่านได้เข้าใช้ระบบเมื่อวานนี้ และผลลัพธ์ใน log ไม่ถูกปรับอย่างที่ควรจะเป็น เวลาผ่านไปประมาณ 2 ชั่วโมง ก็ได้ทราบว่าพบปัญหาจริง แต่ยังแก้ไขไม่สำเร็จ เพราะ code ทำงานในเครื่องจำลองที่ใช้เป็นฐานในการพัฒนานั้นทำงานอย่างถูกต้อง มีข้อสงสัยว่าระบบ mysql ในเครื่องหลักมีปัญหา .. ก็สงสัยว่าจริงหรือ
     เมื่อผมเข้าไปดู code ก็พบว่าปกติ แต่ insert record ใหม่ไม่เข้าเท่านั้น ไปตรวจจำนวนระเบียนพบว่ามี 127 ระเบียน และไม่มีการเพิ่มขึ้นอีก .. นึกไปนึกมา ก็นึกได้ว่า 127 คือครึ่งหนึ่งของ 256 ซึ่งเป็นเลขที่อาจเป็นข้อจำกัดของ data type ที่เก็บข้อมูล จึงเข้าไปดูโครงสร้างแฟ้มด้วย phpmyadmin ก็พบว่า autonumber กำหนดเป็น tinyint ซึ่งรับระหว่าง -128 – 127 เมื่อแก้ไขเป็น int แล้ว ก็เก็บข้อมูลของผู้ที่ login เข้าสู่ระบบได้ตามปกติ ถึงวันนี้มีผู้เข้าระบบไปแล้ว 33 คน สำหรับคณะวิทย์ฯ มีบุคลากรเข้าใช้งานไปแล้วร้อยละ 75 ซึ่งสูงที่สุดเมื่อเทียบในระดับคณะวิชาด้วยกัน