oracle触发器执行时报ORA-04091和ORA-00060错误

场景:业务层面删除(物理删除)表A数据的某条数据时,将该条数据插入B表。

在A表上建立了触发器

CREATE OR REPLACE TRIGGER cmsinfo
AFTER delete
ON tablea
for each row
BEGIN
IF DELETING THEN
       INSERT INTO tableb values(:old.id);
end if;
END cmsinfo ;

这是执行删除的话会报ORA-04091错误

ORA-04091: 表 tablea 发生了变化, 触发器/函数不能读它

网络上找了一下说是要自治事物,修改触发器如下后,依然报错

CREATE OR REPLACE TRIGGER cmsinfo
AFTER delete
ON tablea
for each row
declare
    pragma autonomous_transaction;
BEGIN
IF DELETING THEN
       INSERT INTO tableb values(:old.id);
       COMMIT;
end if;
END cmsinfo ;

执行删除后报错如下

nested exception is java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

如何在不修改也代码的情况下,完成此需求(删除(物理删除)表A数据的某条数据时,将该条数据插入B表)。

因为项目不是我们自己的不太好修改,想从数据库层面实现。

阅读 2.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题