ข้อผิดพลาด Delimiter ใน MySQL เกิดขึ้นเมื่อใช้ Delimiter แบบ Pipe (|) ร่วมกับ Semicolon (;) ใน MySQL เวอร์ชันต่ำกว่า 8.0.12
MySQL ถือว่า Pipe (|) เป็น Delimiter ตัวหนึ่ง และ Semicolon (;) เป็นอีกตัวหนึ่ง จึงไม่ควรสับสนระหว่าง Delimiter แบบ Pipe กับ Semicolon
หมายเหตุ: ใน MySQL 8.0.12 Pipe Delimiter ทำงานร่วมกับ Semicolon ได้ปกติ หากใช้เวอร์ชันต่ำกว่า 8.0.12 จะเกิด Delimiter Error
ตัวอย่างการทำงานของ Delimiter
mysql> delimiter |; mysql> create procedure getSumOfTwoNumbers() -> BEGIN -> SELECT 2+3 AS TotalValue; -> END ; -> |; Query OK, 0 rows affected (0.17 sec) mysql> delimiter ;
เรียก Stored Procedure:
mysql> CALL getSumOfTwoNumbers();
ผลลัพธ์:
+------------+ | TotalValue | +------------+ | 5 | +------------+ 1 row in set (0.00 sec)
แต่ไม่ควรใช้ Pipe Delimiter ร่วมกับ Semicolon เพราะ Semicolon เป็น Delimiter เริ่มต้นของ MySQL ใช้บอกจบคำสั่ง
ตัวอย่างการเปลี่ยน Delimiter แบบมาตรฐาน
1. ตั้ง Delimiter เป็น Pipe:
mysql> DELIMITER |
2. สร้าง Stored Procedure:
mysql> DELIMITER | mysql> CREATE PROCEDURE Demo() -> BEGIN -> SELECT 2*3 AS TotalMultiplication; -> END ; -> | Query OK, 0 rows affected (0.12 sec)
3. กลับมาใช้ Semicolon:
mysql> DELIMITER ;