ข้อผิดพลาดของ Stored Procedure มักเกิดจากไม่ใช้ DELIMITER เปลี่ยนตัวคั่นคำสั่งชั่วคราว
ตัวอย่าง Stored Procedure ที่ถูกต้อง
mysql> DELIMITER //
mysql> CREATE PROCEDURE correct_procedure()
BEGIN
SELECT 'Hello MySQL !!!';
END //
Query OK, 0 rows affected (0.12 sec)
mysql> DELIMITER ;
การเรียกใช้ Stored Procedure
call yourStoredProcedureName();
เรียกใช้งาน
mysql> call correct_procedure();
ผลลัพธ์:
+-----------------+ | Hello MySQL !!! | +-----------------+ | Hello MySQL !!! | +-----------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.02 sec)
ทำไมต้องใช้ DELIMITER?
- MySQL ใช้
;เป็นตัวคั่นคำสั่ง (statement terminator) - ใน Stored Procedure มี
;หลายตัวภายใน BEGIN...END - หาไม่เปลี่ยน DELIMITER MySQL จะคิดว่าจบคำสั่งที่
;แรก - เปลี่ยนเป็น
//(หรืออะไรก็ได้ที่ไม่ชน) ชั่วคราว แล้วคืนกลับ;ท้ายสุด
โครงสร้าง Stored Procedure เต็มรูปแบบ
DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT, OUT param2 VARCHAR(100))
BEGIN
DECLARE local_var INT DEFAULT 0;
SELECT COUNT(*) INTO local_var FROM some_table WHERE id = param1;
IF local_var > 0 THEN
SET param2 = 'Found';
ELSE
SET param2 = 'Not Found';
END IF;
END //
DELIMITER ;
การจัดการ Error ใน Stored Procedure
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL; -- ส่ง error ต่อไป
END;