ORACLE觸發器判斷是否更新了某個字段


       今天遇到一個有意思的小問題,一同事有這樣一個需求:在更新表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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM