这个报错提示折腾了一个下午,幸好有度娘,这里总结一下经验~
1.场景说明:在A表新建触发器,修改或插入记录后,修改B表关联的记录,这种场景若不是通过程序代码来实现,触发器是目前想到的解决方法。
2.反馈报错:【表发生了变化,触发器或函数不能读它】,这数据库提示让人一头雾水,不够清晰明白,差评~
3.问题分析:网上查了下,是由于Oracle执行了表记录更新后,还需要commit操作,才算事务结束,而问题就出在此时A表还未执行该commit操作,触发器就去更新B表了,这样可能会导致A表和B表记录不同步,PS:感觉Oracle这个规则比较奇怪,就不能默认A表commit后再执行触发器么,反正,按下面修改一下触发器属性就好了~
CREATE OR REPLACE Trigger TestA
Before Insert Or Update On A表
For Each Row
Declare
参数;
参数;
Pragma Autonomous_Transaction;--