Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ไม่สามารถใช้ Semicolon (;) เป็น DELIMITER ใน MySQL Stored Procedure ได้

บทนำ

ใน 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 ; เสมอ