คำสั่ง SIGNAL ใน MySQL Trigger
คำสั่ง SIGNAL เป็นกลไกจัดการข้อผิดพลาดสำหรับการจัดการสถานการณ์ที่ไม่คาดคิด และการออกจากโปรแกรมอย่างเหมาะสม SIGNAL ให้ข้อมูลข้อผิดพลาดแก่ Handler
ไวยากรณ์พื้นฐาน
SIGNAL SQLSTATE | condition_value
[SET signal_information_item = value_1[, signal_information_item = value_2, ...]]
รายละเอียด:
- SIGNAL ต้องระบุค่า SQLSTATE หรือชื่อเงื่อนไขที่ประกาศด้วย DECLARE CONDITION
- ค่า SQLSTATE ประกอบด้วยรหัส 5 ตัวอักษร英数字
- ห้ามเริ่ม SQLSTATE ด้วย '00' เพราะแสดงความสำเร็จ ไม่ใช่ข้อผิดพลาด
- สำหรับการจัดการข้อผิดพลาดทั่วไป ใช้ SQLSTATE '45000' ซึ่งหมายถึง "unhandled user-defined exception"
ตัวอย่าง: ตรวจสอบอายุไม่ติดลบ
mysql> CREATE TRIGGER before_insert_studentage BEFORE INSERT ON student_age
-> FOR EACH ROW
-> BEGIN
-> IF NEW.age < 0 THEN
-> SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'age less than 0';
-> END IF;
-> END; //
Query OK, 0 rows affected (0.12 sec)
mysql> INSERT INTO student_age(age, name) VALUES(-10, 'gaurav');
ERROR 1644 (45000): age less than 0
ผลลัพธ์แสดงว่าเมื่อพยายามแทรกอายุติดลบ Trigger จะโยนข้อผิดพลาดผ่าน SIGNAL