使用表触发器的Oracle合并内部触发器已打开

时间:2013-10-30 18:21:33

标签: oracle

我收到了ORA-04091:变异错误

我在tableA上有一个触发器。在这个触发器内部,它使用了一个开始和触发器运行的记录上的结束日期字段,并将其分解为跨越多少个月。然后我循环每个月并将完全重复的记录添加到tableB(如果它不存在)或更新字段(如果它存在)。我试图通过合并来实现这一点,其中'using'是tableA(触发器触发的那个),但这会导致错误。

我可以在tableB中检查记录是否存在(:NEW)并基于此进行插入/更新,但由于这基本上就是合并命令正在做的事情,有没有办法以这种方式使用merge而不会出现变异错误?

1 个答案:

答案 0 :(得分:2)

假设您需要A中唯一的信息是正在修改的行中的数据,您可以执行类似

的操作
MERGE INTO b
 USING( SELECT :new.col1, :new.col2, :new.col3, ... , :new.colN 
          FROM dual )
    ON( ... )
...

如果你想编写一个MERGE来源,那就是你要做的事情,其中​​源是传递给过程的参数中的数据。