2009-01-22 14 views
16

Tengo problemas para definir un desencadenador para una base de datos MySQL. Quiero cambiar un campo de texto antes de insertar una nueva fila (bajo una condición dada). Esto es lo que he intentado:Creación de desencadenante para la tabla en la base de datos MySQL (error de sintaxis)

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF (NEW.sHeaders LIKE "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]"; 
    END IF; 
END; 

Pero siempre me sale el error "sintaxis incorrecta". Me quedé atascado, ¿qué estoy haciendo mal? estoy usando MySQL 5.0.51a-comunidad

Por cierto: Creación de un disparador de vacío como esto funciona bien:

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
END; 

Pero esto no funciona, también:

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF 1=1 THEN 
    END IF; 
END; 

Es mi Es la primera vez que uso stackoverflow.com, así que estoy muy entusiasmado si es útil publicar algo aquí :-)

+0

¿Qué ocurre si se quita "SET"? También debe cambiar NEW.sHeaders + "BCC: [email protected]" a CONCAT (NEW.sHeaders, "BCC: [email protected]") – Greg

+0

Estoy haciendo de esto un comentario, no una respuesta porque es una suposición: p – Greg

+0

¡Gracias! Lo he intentado, pero el error de sintaxis parece ser causado por la declaración if. Incluso la siguiente falla: Crear activador add_bcc ANTES DE INSERTAR EN cola de correo PARA CADA FILA COMENZAR SI 1 = 1 entonces END IF; END; Lamentablemente, MySQL no da ninguna buena pista de lo que se trata el error ... –

Respuesta

27

Necesita change the delimiter - MySQL está viendo el primero ";" como el final de la declaración CREATE TRIGGER.

Prueba esto:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */ 
DELIMITER $$ 

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF (NEW.sHeaders LIKE "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]"; 
    END IF; 
END$$ 
/* This is now "END$$" not "END;" */ 

/* Reset the delimiter back to ";" */ 
DELIMITER ; 
Cuestiones relacionadas