บทนำ
ใน MySQL ตัวคั่นคำสั่ง (Delimiter) เริ่มต้นคือ Semicolon (;) แต่เมื่อสร้าง Stored Procedure ต้องมี Semicolon ภายใน Body ดังนั้น **ต้องเปลี่ยน Delimiter ชั่วคราว** ก่อนสร้าง Procedure
เหตุผล
หากใช้ ; เป็น Delimiter ขณะสร้าง Procedure MySQL จะคิดว่าคำสั่งจบที่ Semicolon แรกใน Body ทำให้ Procedure ไม่สมบูรณ์และสร้างไม่สำเร็จ
รูปแบบมาตรฐาน
DELIMITER //
CREATE PROCEDURE YourProcedureName()
BEGIN
Statement1;
Statement2;
...
StatementN;
END //
DELIMITER ;
ตัวอย่าง: สร้าง Procedure แสดงข้อความ
mysql> DELIMITER //
mysql> CREATE PROCEDURE Get_Message()
-> BEGIN
-> SELECT CONCAT('HELLO', ' ', 'MYSQL USERS');
-> END
-> //
Query OK, 0 rows affected (0.23 sec)
mysql> DELIMITER ;
เรียกใช้ Procedure
mysql> CALL Get_Message();
ผลลัพธ์
+-----------------------------------+
| CONCAT('HELLO', ' ', 'MYSQL USERS') |
+-----------------------------------+
| HELLO MYSQL USERS |
+-----------------------------------+
1 row in set (0.00 sec)
Delimiter อื่นที่ใช้ได้
//(นิยมใช้มากที่สุด)$$||@@- สตริงใดๆ ที่ไม่ซ้ำกับ SQL Syntax
ข้อสังเกต
DELIMITERเป็นคำสั่งของ MySQL Client (mysql command line) ไม่ใช่ SQL Standard- ใน Programming Languages (PHP, Python, Java) ไม่ต้องเปลี่ยน Delimiter เพราะส่งคำสั่งทั้งก้อนไปพร้อมกัน
- หลังสร้าง Procedure เสร็จ ต้องคืน
DELIMITER ;เสมอ