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

การใช้ DELIMITER ใน Stored Procedure MySQL เพื่อหลีกเลี่ยงข้อผิดพลาด BEGIN/END

ข้อผิดพลาดของ 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;