今天遇到一個有意思的小問題,一同事有這樣一個需求:在更新表T時,如果只是更新字段C,那么不希望觸發該該表的觸發器去處理業務邏輯。即想在觸發器中做出判斷:如果更新了字段C,那么跳出觸發器,不處理業務邏輯,如果是更新其它字段,那么讓觸發器去處理業務邏輯。
他是這樣做的
1: if :NEW.C != :OLD.C then
2: return;
3: end if;
其實這個只需要使用條件謂詞 DELETING即可解決,當觸發事件是UPDATE時,如果修改了COLUMN_X時,則UPDATING(COLUMN_X)則為TRUE,否則為FALSE,所以上面代碼改為下面代碼即可實現其業務需求:
1: if updating('C') then
2: return;
3: end if;