2012-10-11 74 views
11

我有一個表staffoffice列。目前office列不接受NULL值。應用程序堅持到這張表上有一個錯誤,這意味着,當員工還沒有被分配到一個辦公室時,它會嘗試在表上插入一個NULL值。插入值之前的MySQL觸發器檢查

我被要求使用觸發器將插入截取到Staff表中,並檢查office值是否爲NULL,並將其替換爲值N/A

以下是我迄今的嘗試,但確實有error試圖實現。任何關於如何解決這個問題的想法。

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; 

錯誤:

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

爲什麼不改變架構,以便'NULL'的允許值?這正是「NULL」應該使用的地方,因爲它可以區分沒有辦公室和辦公室,而辦公室恰好具有「N/A」的值(而你的建議解決方案不會)。 – eggyal

回答

10

首先,改變表允許空值:

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

(Cha 。NGE CHAR(40)到任何爲宜)然後,你可以爲你的觸發器使用:

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

它不應該是這樣的:

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

這麼酷,你抓住了這兩個問題:) – 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;