2009-01-22 25 views
16

Tôi gặp sự cố khi xác định trình kích hoạt cho cơ sở dữ liệu MySQL. Tôi muốn thay đổi một trường văn bản trước khi chèn một hàng mới (trong một điều kiện nhất định). Đây là những gì tôi đã thử:Tạo trình kích hoạt cho bảng trong cơ sở dữ liệu MySQL (lỗi cú pháp)

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF (NEW.sHeaders LIKE "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:in[email protected]"; 
    END IF; 
END; 

Nhưng tôi luôn gặp lỗi "sai cú pháp". Tôi bị kẹt, tôi đang làm gì sai? Tôi đang sử dụng MySQL 5.0.51a-cộng đồng

BTW: Tạo một trigger có sản phẩm nào như thế này hoạt động tốt:

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
END; 

Nhưng điều này thất bại, quá:

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF 1=1 THEN 
    END IF; 
END; 

Đó là tôi lần đầu tiên để sử dụng stackoverflow.com, vì vậy tôi rất vui mừng nếu nó là hữu ích để gửi một cái gì đó ở đây :-)

+0

Điều gì xảy ra nếu bạn loại bỏ "SET"? Ngoài ra, bạn nên thay đổi NEW.sHeaders + "BCC: [email protected]" thành CONCAT (NEW.sHeaders, "BCC: [email protected]") – Greg

+0

Tôi đang làm cho nhận xét này không phải là câu trả lời vì đó là phỏng đoán: p – Greg

+0

Cảm ơn! Tôi đã thử nó, nhưng lỗi cú pháp dường như được gây ra bởi câu lệnh if. Ngay cả những điều sau đây không thành công: TẠO TRIGGER add_bcc TRƯỚC KHI CHERTN TRÊN MailQueue CHO M EI ROW BEGIN NẾU 1 = 1 THEN END IF; END; Đáng buồn thay, MySQL không đưa ra bất kỳ gợi ý tốt nào về lỗi này ... –

Trả lời

27

Bạn cần phải change the delimiter - MySQL đang nhìn thấy chữ ";" đầu tiên như là kết thúc của câu lệnh CREATE TRIGGER.

Hãy thử điều này:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */ 
DELIMITER $$ 

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF (NEW.sHeaders LIKE "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]"; 
    END IF; 
END$$ 
/* This is now "END$$" not "END;" */ 

/* Reset the delimiter back to ";" */ 
DELIMITER ; 
Các vấn đề liên quan