2011-12-31 14 views
8

में अन्य का उपयोग करते समय त्रुटि मुझे यकीन नहीं है कि मेरे कोड में क्या गलत है।एसक्यूएल ट्रिगर

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
ELSE IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

उपरोक्त संस्करण काम नहीं करता है। यह "ईएनडी" (अंतिम पंक्ति) के पास वाक्यविन्यास त्रुटि कहता है। लेकिन कुछ काम करता है जब मैं

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

मुझे यकीन नहीं है कि क्यों। क्या मैं कुछ भूल रहा हूँ?

उत्तर

20

ELSE IF के बजाय, MySQL's syntaxELSEIF (अंतरिक्ष के बिना) का उपयोग करता है।

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
ELSEIF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

यद्यपि आप एक अतिरिक्त END IF जोड़कर ELSE IF में अंतरिक्ष के साथ काम करने के लिए सक्षम हो सकता है। अंतरिक्ष का उपयोग करके, आप प्रभावी रूप से दूसरा IF कथन शुरू करते हैं, जिसे पहले बाहरी IF कथन से स्वतंत्र रूप से बंद किया जाना चाहिए।

/* Might work */ 
delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
/* Opens a seconds IF block which must be closed */ 
ELSE IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
    /* Close inner IF block */ 
    END IF; 
END IF; 
END$$ 
+0

वाक्य रचना के लिए लिंक :-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html –

+0

@AdrianCornish धन्यवाद वहाँ में पहले से ही जोड़ा जा रहा है यह है, शब्द से जुड़ा हुआ " MySQL का वाक्यविन्यास " –

+0

मेरी माफ़ी - मैंने लिंक पर क्लिक नहीं किया –

संबंधित मुद्दे