Ví dụ sau đây dựa trên phương pháp bẫy lỗi được xử lý bằng jerry trong các kích hoạt từ Chương 11, Trang 254-256 của cuốn sách Lập trình thủ tục lưu trữ MySQL dưới tiêu đề 'Xác thực dữ liệu với Triggers' :
DELIMITER $$
CREATE TRIGGER reservation_bi BEFORE INSERT ON reservation FOR EACH ROW
BEGIN
DECLARE found_count,dummy INT;
SELECT COUNT(1) INTO found_count FROM flights WHERE numflight=new.numflight;
IF found_count = 0 THEN
SELECT 'Cannot Insert This Reservation Because Flight Number is Invalid'
INTO dummy FROM reservation WHERE numflight=new.numflight;
END IF;
END; $$
DELIMITER ;
Nếu có xác nhận khác được thực hiện, hãy làm theo phương pháp bẫy lỗi tương tự này !!!
CẬP NHẬT
Lý do cuốn sách gợi ý việc ưu tiên Trình kích hoạt theo cách này xuất phát từ thực tế là Ngôn ngữ thủ tục lưu trữ MySQL không có TÍN HIỆU thực hiện thành ngôn ngữ (tất nhiên, TÍN HIỆU là tiêu chuẩn ANSI).
Các tác giả của cuốn sách đã tạo ra các công việc xung quanh bằng cách gọi các câu lệnh SQL đúng về mặt cú pháp nhưng thất bại khi chạy. Trang 144-145 (Chương 6: Xử lý lỗi) của cuốn sách đưa ra các ví dụ này về việc ưu tiên trực tiếp Quy trình được lưu trữ (Ví dụ 6-18) hoặc bằng cách mô phỏng TÍN HIỆU (Ví dụ 6-19 và 6-20).
# Example 6-18. Using a nonexistent column name to force an error to the calling program
CREATE PROCEDURE sp_update_employee_dob2
(p_employee_id INT, p_dob DATE)
BEGIN
IF datediff(curdate(),p_dob)<(16*365) THEN
UPDATE `Error: employee is too young; Employee must be 16 years or older`
SET x=1;
ELSE
UPDATE employees
SET date_of_birth=dob
WHERE employee_id=p_dob;
END IF;
END;
# Example 6-19. Standard procedure to emulate SIGNAL
CREATE PROCEDURE `my_signal`(in_errortext VARCHAR(255))
BEGIN
SET @sql=CONCAT('UPDATE `',in_errortext,'` SET x=1');
PREPARE my_signal_stmt FROM @sql;
EXECUTE my_signal_stmt;
DEALLOCATE PREPARE my_signal_stmt;
END;
# Example 6-20. Using our SIGNAL emulation procedure to raise an error
CREATE PROCEDURE sp_update_employee_dob2
(p_employee_id INT, p_dob DATE)
BEGIN
IF datediff(curdate(),p_dob)<(16*365) THEN
CALL my_signal('Error: employee is too young; Employee must be 16 years or older')
ELSE
UPDATE employees
SET date_of_birth=dob
WHERE employee_id=p_dob;
END IF;
END;
Thật không may, việc mô phỏng TÍN HIỆU từ các ví dụ 6-19 và 6-20 có thể được thực hiện trong Triggers. Các tác giả của cuốn sách đã sử dụng kỹ thuật này trong ví dụ 6-18 để tránh các yếu tố kích hoạt ở trang 254-256. Đây là lý do tại sao đề xuất của cuốn sách phải là cách để đi.