2013-08-21 128 views
1

如何包含我需要監視的列?即而不是一個WHEN的病情,我想有3個WHEN條件:觸發多個WHEN條件

CREATE TRIGGER freeradius.insert_into_day_summations 
    BEFORE INSERT ON freeradius.day_guiding_usage 
    FOR EACH ROW 
    WHEN (OLD.col1 IS DISTINCT FROM NEW.col1) 
    WHEN (OLD.col2 IS DISTINCT FROM NEW.col2) 
    WHEN (OLD.col3 IS DISTINCT FROM NEW.col3) 
EXECUTE procedure update_sessioninfo(); 
+0

你只是嘗試將它們與'或'結合?該文件說這只是一個布爾條件。應該工作正常。 –

回答

4

形成一個單一的表達ORAND - 這取決於你是否希望在所有條件滿足觸發或當任一個條件滿足:

CREATE TRIGGER insert_into_day_summations 
BEFORE UPDATE ON freeradius.day_guiding_usage 
FOR EACH ROW 
WHEN (OLD.col1 IS DISTINCT FROM NEW.col1 
    OR OLD.col2 IS DISTINCT FROM NEW.col2 
    OR OLD.col3 IS DISTINCT FROM NEW.col3) 
EXECUTE procedure update_sessioninfo(); 

這只是一個布爾表達式,不必在單獨列。我引述the manual on CREATE TRIGGER

condition 

一個布爾表達式,決定是否觸發功能實際上將被執行。

然而,你的表情纔有意義爲UPDATE,不爲INSERT。對於插入,OLD記錄不存在。
而觸發器名稱本身不能被模式限定。引用手動一次:

的名稱賦予新觸發器。這必須與同一個表的任何其他觸發器的名稱不同。該名稱不能用模式修飾

大膽重點煤礦。

+0

Thanx Erwin它的工作原理 – user2594853