ตอนที่ 3 : การ Print และแสดงผลบน Stored Procedure (MySQL : Stored Procedure)

พฤษภาคม 14, 2018 2:29 am โดย admin
0
6

ตอนที่ 3 : การ Print และแสดงผลบน Stored Procedure (MySQL : Stored Procedure) ในปัจจุบัน MySQL ยังไม่มีเครื่องมือที่สามารถทำการ Debug ตัว Stored Procedure ได้ ฉะนั้นในการเขียน อาจจะต้องทำการ SELECT ค่าเพื่อ Debug ตรวจสอบค่า แต่ใน MySQL นั้นยังไม่สามารถทำการ PRINT เพื่อแสดง Message ได้ ฉะนั้นยังคงจะต้องใช้ Feature ในการที่จะ SELECT ค่าแล้วให้แสดงออกมาทาง Result ของ Query


แต่ในบทความนี้ผมมีเทคนิคที่จะช่วยให้การ PRINT ค่าหรือ Debug ค่านั้นทำได้ง่ายขึ้น ซึ่งก็ใช้เทคนิคการสร้าง table ขึ้นมา 1 ตัว จากนั้นเมื่อต้องการเก็บค่าที่เกิดขึ้นก็เพียงนำค่าไป Insert ลงใน Table นี้ โดยจะสร้างเป็น Stored Procedure ไว้สำหรับรับค่าและ Insert ค่าลงใน table

โครงสร้างของตาราง customer 

Table : customer

Stored Procedure บน MySQL

SELECT Syntax

1.SELECT 'String or Variable'


สามารถใช้การ CONCAT ค่าระหว่าง String กับ Variable ได้

Example 1 ตัวอย่างการแสดงค่า SELECT ออกทาง Result ของ Query

 

01.DROP PROCEDURE IF EXISTS getCustomer;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getCustomer()
05.BEGIN
06. 
07.DECLARE x,y INT DEFAULT 0;
08. 
09.SELECT COUNT(*) INTO FROM customer;
10. 
11.SELECT COUNT(*) INTO FROM customer WHERE COUNTRY_CODE = 'US';
12. 
13.SELECT concat('x =  ', x),concat('y =  ', y);
14. 
15.END //
16. 
17.DELIMITER ;


แสดงค่า SELECT ทั้งที่มาจาก String และจาก Variable 

 

1.CALL getCustomer();


Result
MySQL Stored Procedure Print

Example 2 วิธีการสร้าง Table และ Stored Procedure ไว้สำหรับเก็บ Message Log

สร้าง Table ชื่อว่า stored_log

1.CREATE TABLE IF NOT EXISTS `stored_log` (
2.`log_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
3.`connection_id` int(11) NOT NULL,
4.`message` varchar(500) NOT NULL
5.) ENGINE=InnoDB DEFAULT CHARSET=utf8;


MySQL Stored Procedure Print

สร้าง Table สำหรับเก็บ Log

MySQL Stored Procedure Print

สร้าง Stored Procedure ชื่อว่า writeLog

01.DROP PROCEDURE IF EXISTS writeLog;
02. 
03.DELIMITER //
04.CREATE PROCEDURE writeLog(IN sLogMsg VARCHAR(500))
05.BEGIN
06.INSERT INTO stored_log (connection_id,message) VALUES (connection_id(),sLogMsg);
07.END //
08. 
09.DELIMITER ;


หลังจากที่เราได้ Stored ชื่อว่า writeLog แล้ว เมื่อเราสร้าง Stored อื่น ๆ ก็สามารถที่จะเรียกหรือ CALL ตัว writeLog เพื่อจัดเก็บรายการ Log หรือ Message

 

1.CALL writeLog('Step 1');

ตัวอย่างการสร้าง Stored Procedure เพื่อเรียกใช้งานและจัดเก็บ Message Log

01.DROP PROCEDURE IF EXISTS getCustomer;
02. 
03.DELIMITER //
04.CREATE PROCEDURE getCustomer()
05.BEGIN
06. 
07.DECLARE x,y INT DEFAULT 0;
08. 
09.CALL writeLog('Step 1');
10. 
11.SELECT COUNT(*) INTO FROM customer;
12. 
13.CALL writeLog(concat('Step 2 x=',x));
14. 
15.SELECT COUNT(*) INTO FROM customer WHERE COUNTRY_CODE = 'US';
16. 
17.CALL writeLog(concat('Step 3 y=',y));
18. 
19.END //
20. 
21.DELIMITER ;


ทดสอบการทำงาน

1.CALL getCustomer();


ผลลัพธ์ที่ได้หลังจากที่มีการเรียก CALL

MySQL Stored Procedure Print

แหล่งที่มา : thaicreate.com/tutorial