2011-12-31 12 views
8

No estoy seguro de cuál es incorrecto con mi código.Error al usar else en el disparador 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 versión anterior no funciona. Dice un error de sintaxis cerca de "END" (Última línea). Pero algo funciona cuando 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$$ 

No estoy seguro de por qué. ¿Me estoy perdiendo de algo?

Respuesta

20

En lugar de ELSE IF, MySQL's syntax utiliza ELSEIF (sin el espacio).

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

pesar de que podría ser capaz de hacer que funcione con el espacio en el ELSE IF mediante la adición de un adicional END IF. Al usar el espacio, inicia de manera efectiva una segunda instrucción IF, que debe cerrarse independientemente de la primera declaración externa 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

Adición de enlace para la sintaxis :-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html –

+0

@AdrianCornish Gracias ya está ahí, ligado a las palabras " La sintaxis de MySQL " –

+0

Mis disculpas: no hice clic en el enlace –

Cuestiones relacionadas