1

我收到 ORA-04091:变异错误

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

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

4

1 回答 1

2

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

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

如果您想编写MERGE源代码是来自传递到过程中的参数的数据,这与您所做的基本相同。

于 2013-10-30T18:43:13.270 回答