2009-01-22 16 views
16

मुझे एक MySQL डेटाबेस के लिए ट्रिगर को परिभाषित करने में समस्या है। मैं एक नई पंक्ति डालने से पहले एक टेक्स्टफील्ड को बदलना चाहता हूं (किसी दिए गए शर्त के तहत)। मैंने यह कोशिश की है:MySQL डेटाबेस (वाक्यविन्यास त्रुटि) में तालिका के लिए ट्रिगर बनाना

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

लेकिन हमेशा मुझे "गलत वाक्यविन्यास" त्रुटि मिलती है। मैं अटक गया, मैं क्या गलत कर रहा हूँ? मैं MySQL 5.0.51a-समुदाय

BTW उपयोग कर रहा हूँ: इस तरह एक खाली ट्रिगर बनाना ठीक काम करता है:

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

लेकिन यह विफल रहता है, भी:

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

यह मेरी stackoverflow.com का उपयोग करने के लिए पहली बार, इसलिए मैं बहुत उत्साहित हूं अगर यह यहां कुछ पोस्ट करने में मददगार है :-)

+0

क्या आप "सेट करें" को दूर होता तो क्या होगा? साथ ही आपको CONCAT (NEW.sHeaders, "BCC: [email protected]") पर 0.sपर NEW.sHeaders + "BCC: [email protected]" को बदलना चाहिए। – Greg

+0

मैं इसे एक टिप्पणी नहीं दे रहा हूं क्योंकि यह अनुमान है: पी – Greg

+0

धन्यवाद! मैंने कोशिश की है, लेकिन वाक्यविन्यास त्रुटि अगर कथन के कारण होती है। यहां तक ​​कि निम्न में विफल रहता है: TRIGGER add_bcc बनाएँ सम्मिलित करने से पहले MailQueue पर प्रत्येक पंक्ति के लिए शुरू समाप्त करते हैं यदि 1 = 1 तब ; अंत; अफसोस की बात है, MySQL कोई अच्छा संकेत नहीं देता है कि त्रुटि क्या है ... –

उत्तर

27

आपकोकी आवश्यकता है- MySQL पहले ";" देख रहा है क्रिएट ट्रिगर स्टेटमेंट के अंत के रूप में।

इस प्रयास करें:

/* 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 ; 
संबंधित मुद्दे