2011-12-31 11 views
8

Nie jestem pewien, co jest nie tak z moim kodem.Błąd podczas używania else, jeśli w parametrze sql trigger

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

Powyższa wersja nie działa. Mówi błąd składni w pobliżu "END" (Last line). Ale coś działa, gdy używam

Nie jestem pewien, dlaczego. Czy czegoś brakuje?

Odpowiedz

20

Zamiast , MySQL's syntax używa ELSEIF (bez spacji).

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

Chociaż może być w stanie zrobić to praca z przestrzenią w ELSE IF dodając dodatkowy END IF. Używając tej przestrzeni, skutecznie zainicjujesz drugie oświadczenie, które musi być zamknięte niezależnie od pierwszej zewnętrznej instrukcji 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

Dodanie linku do składni :-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html –

+0

@AdrianCornish Thanks to już tam jest, związana z napisem " Składnia MySQL " –

+0

Moje przeprosiny - nie kliknąłem linku –