2012-10-11 15 views
11

Mam tabelę staff z kolumną office. Obecnie kolumna office nie przyjmuje wartości NULL. Aplikacja nadal działająca na tej tablicy ma błąd, który oznaczał, że gdy personel nie został przypisany do biura, próbuje wstawić wartość NULL do tabeli.Wyzwalacz MySQL przed Wstaw wartość Sprawdzanie

Zostałem poproszony o użycie spustu w celu przechwycenia wkładki na tabelę Staff i sprawdzenie, czy wartość office wynosi NULL i zastąpienie jej wartością N/A.

Poniżej moja dotychczasowa próba, ale przy próbie wdrożenia mam error. Wszelkie pomysły, jak rozwiązać ten problem.

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; 

Błąd:

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

Dlaczego nie zmienić schemat tak, że 'wartości NULL' są dozwolone? Właśnie do tego powinno się używać 'NULL', ponieważ umożliwia rozróżnienie pomiędzy brakiem biura a biurem, które ma wartość" N/A "(podczas gdy proponowane przez ciebie rozwiązanie nie byłoby). – eggyal

Odpowiedz

10

pierwsze, zmienić tabelę, aby umożliwić null:

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

(Cha . EDN CHAR(40) na to, co jest właściwe) Następnie można użyć jako wyzwalacza:

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

Nie powinno to być coś takiego:

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

Fajnie, złapałeś oba problemy :) – 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; 
Powiązane problemy