2011-12-31 19 views
8

Tôi không chắc chắn có gì sai với mã của mình.Lỗi khi sử dụng khác nếu kích hoạt sql

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$$ 

Phiên bản trên không hoạt động. Nó nói lỗi cú pháp gần "END" (Dòng cuối cùng). Nhưng một cái gì đó hoạt động khi tôi sử dụng

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$$ 

Tôi không chắc chắn lý do tại sao. Tui bỏ lỡ điều gì vậy?

Trả lời

20

Thay vì ELSE IF, MySQL's syntax sử dụng ELSEIF (không có khoảng trắng).

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$$ 

Mặc dù bạn có thể có thể làm cho nó làm việc với các không gian trong ELSE IF bằng cách thêm thêm END IF. Bằng cách sử dụng không gian, bạn bắt đầu có hiệu quả câu lệnh thứ hai IF, phải được đóng một cách độc lập với tuyên bố IF bên ngoài đầu tiên.

/* 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

Thêm liên kết cho cú pháp :-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html –

+0

@AdrianCornish cám ơn nó đã ở đó, liên quan đến dòng chữ " Cú pháp của MySQL " –

+0

Lời xin lỗi của tôi - Tôi đã không nhấp vào liên kết –

Các vấn đề liên quan