代码改变世界

ORACLE触发器判断是否更新了某个字段

  潇湘隐者  阅读(21621)  评论(0编辑  收藏  举报

       今天遇到一个有意思的小问题,一同事有这样一个需求:在更新表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;

编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示