我收到了ORA-04091:变异错误
我在tableA上有一个触发器。在这个触发器内部,它使用了一个开始和触发器运行的记录上的结束日期字段,并将其分解为跨越多少个月。然后我循环每个月并将完全重复的记录添加到tableB(如果它不存在)或更新字段(如果它存在)。我试图通过合并来实现这一点,其中'using'是tableA(触发器触发的那个),但这会导致错误。
我可以在tableB中检查记录是否存在(:NEW)并基于此进行插入/更新,但由于这基本上就是合并命令正在做的事情,有没有办法以这种方式使用merge而不会出现变异错误?
答案 0 :(得分:2)
假设您需要A
中唯一的信息是正在修改的行中的数据,您可以执行类似
MERGE INTO b
USING( SELECT :new.col1, :new.col2, :new.col3, ... , :new.colN
FROM dual )
ON( ... )
...
如果你想编写一个MERGE
来源,那就是你要做的事情,其中源是传递给过程的参数中的数据。