สาเหตุและวิธีแก้ไขข้อผิดพลาด Syntax ใน Stored Procedure
ข้อผิดพลาด "You have an error in your SQL syntax" มักเกิดขึ้นเมื่อสร้าง Stored Procedure, Trigger หรือ Function ใน MySQL เนื่องจากเครื่องหมาย semicolon (;) ถูกนำไปใช้เป็นตัวจบคำสั่งภายในโค้ดขั้นตอน ทำให้ MySQL ตีความผิดว่าคำสั่งสิ้นสุดลงแล้ว
วิธีแก้ไข: เปลี่ยน Delimiter
ต้องเปลี่ยน delimiter จาก ; เป็น // (หรือสัญลักษณ์อื่นที่ไม่ซ้ำ) ก่อนสร้างโค้ดขั้นตอน แล้วค่อยเปลี่ยนกลับมาเป็น ; หลังจบการสร้าง
รูปแบบคำสั่ง
DELIMITER //
CREATE PROCEDURE yourProcedureName()
BEGIN
Statement1;
...
StatementN;
END //
DELIMITER ;
ตัวอย่างการสร้าง Stored Procedure
mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_getAllRecords()
-> BEGIN
-> SELECT * FROM employeetable;
-> END;
-> //
Query OK, 0 rows affected (0.23 sec)
mysql> DELIMITER ;
การเรียกใช้ Stored Procedure
ใช้คำสั่ง CALL ตามรูปแบบดังนี้:
CALL yourStoredProcedureName();
ตัวอย่างการเรียกใช้งาน
mysql> CALL sp_getAllRecords();
ผลลัพธ์ที่ได้
+------------+--------------+----------------+ | EmployeeId | EmployeeName | EmployeeSalary | +------------+--------------+----------------+ | 2 | Bob | 1000 | | 3 | Carol | 2500 | +------------+--------------+----------------+ 2 rows in set (0.00 sec) Query OK, 0 rows affected (0.02 sec)
สรุป: การเปลี่ยน delimiter เป็นขั้นตอนสำคัญเมื่อเขียน Stored Procedure, Trigger หรือ Function ใน MySQL เพื่อป้องกันข้อผิดพลาด syntax เนื่องจาก semicolon ภายในโค้ด