ora 04091:表XX发生了变化,触发器/函数不能读它(lin49940)

       最近为了更新一个功能, 但是又不想动到原先功能的后台代码,  所以选择了触发器, 触发器我总共就写过4个而已, 我以前也很抵触触发器的.

       oracle 的触发器有表触发器和行触发器, 我用的是行触发器, 并且在这个触发器中需要修改到其他行的数据(例如树结构数据, 子项目要修改父项目的状态), 写完触发器后, 编译没有错误, 但是在触发器执行后报了 "ORA-04091:表XX发生了变化,触发器/函数不能读它" 的错误.

       具体就是建立在某个表上面的触发器是无法处理该表的数据的.

       在google 后, 没有找到解决方法, 但是知道把数据保存到其他地方和自治事务这两种方法.

       自己考虑以后, 有点思路: 表A 的after update 触发器-> 存数据到中间表B -> 建立表B 的after insert 触发器修改表A 的数据.

       在做了一些尝试后, 终于克服了存在的问题, 实现了目标!!

       具体实现思路: 表A 的after update 触发器 -> 存数据到中间表B(注意要把new 的关键数据保存) -> 建立表B 的after insert 触发器(加上自治事务, 查询表A 数据要把new 相关的记录排除, 再通过union 组合, 不然会读到脏数据, 对表A 进行操作)

       处理方法粗糙, 暂时解决问题!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值