2011-12-31 7 views
8

Non sono sicuro che cosa c'è di sbagliato nel mio codice.Errore durante l'utilizzo di else se in trigger 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$$ 

La versione precedente non funziona. Dice l'errore di sintassi vicino a "FINE" (ultima riga). Ma il qualcosa funziona quando uso

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

Non so perché. Mi sto perdendo qualcosa?

risposta

20

Invece di ELSE IF, MySQL's syntax utilizza ELSEIF (senza spazio).

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

Anche se si potrebbe essere in grado di farlo funzionare con lo spazio in ELSE IF con l'aggiunta di un ulteriore END IF. Utilizzando lo spazio, si avvia effettivamente una seconda istruzione IF, che deve essere chiusa indipendentemente dalla prima istruzione esterna 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

Aggiunta di collegamento per la sintassi :-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html –

+0

@AdrianCornish Grazie è già in là, legato alle parole " Sintassi di MySQL " –

+0

Le mie scuse - Non ho fatto clic sul collegamento –