2012-10-11 19 views
11

Tengo una tabla staff con office columna. Actualmente, la columna office no acepta valores NULL. La aplicación que persiste en esta tabla tiene un error que significa que, cuando al personal no se le ha asignado una oficina, intenta insertar un valor NULO en la tabla.Disparo de MySQL antes Insertar valor Comprobando

me han pedido que se utiliza un disparador para interceptar el inserto en la mesa Staff y comprobar si el valor es NULL office y reemplazarlo con valor N/A.

Debajo está mi intento hasta ahora, pero tengo error en el intento de implementarlo. Alguna idea de como resolver esto.

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff 
    FOR EACH ROW BEGIN 
    IF (NEW.office IS NULL) 
    INSERT INTO Staff SET office="N/A"; 
    END IF 
    END; 

El error:

MySQL Database Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO Staff SET office="N/A"; END'

+4

Por qué no cambia el esquema para que se permiten valores de 'null'? Esto es exactamente para lo que se debe usar 'NULL', ya que permite diferenciar entre una oficina y una oficina que tiene el valor de' N/A' (mientras que la solución propuesta no lo haría). – eggyal

Respuesta

10

En primer lugar, modificar la tabla para permitir valores NULL:

ALTER TABLE Staff MODIFY office CHAR(40) DEFAULT "N/A"; 

(Cha . ESN CHAR(40) a lo que sea apropiado) entonces se podría utilizar como desencadenante:

CREATE TRIGGER staffOfficeNullReplacerTrigger 
BEFORE INSERT 
ON Staff 
    FOR EACH ROW BEGIN 
    IF (NEW.office IS NULL) THEN 
     SET NEW.office = "N/A"; 
    END IF 
3

¿No debería ser algo como esto:

DELIMITER $$ 

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff 
FOR EACH ROW BEGIN 
    IF (NEW.office IS NULL) THEN 
     INSERT INTO Staff(office) VALUES("N/A"); 
    END IF; 
END$$ 
+0

Tan genial, atrapaste ambos problemas :) – xception

2
CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff 
    FOR EACH ROW BEGIN 
    IF (NEW.office IS NULL) 
    INSERT INTO Staff SET office="N/A"; 
    END IF 

; add semi colon after END IF

END; 
Cuestiones relacionadas