我有一个触发器,它通过id连接表的一列,并将其插入到一个新表中。当更新,插入,删除表A上的fire时,它将按id分组并连接column1并将其插入表B中。
问题是当触发器触发时,Oracle会抛出异常变异表。这是因为触发器运行查询:
delete from tableb where id = :id;
insert into tablea (id, col1)
select id, wm_concat(col1) from tablea group by id
如何使用触发器修复此问题? (不能使用存储过程,并且希望避免使用计划任务)。
答案 0 :(得分:1)
“如何使用触发器修复此问题?”(无法使用存储过程和 我想避免使用预定的任务。“
使用触发器无法做到这一点。
您不能使用行级触发器,因为正如您所发现的那样,select会抛出变异表异常。
您无法使用表级触发器,因为我们无法在其中引用:NEW或:OLD值。
可以通过在行级触发器中填充命名空间变量来将:NEW或:OLD值传递给表级触发器,但是上下文需要一个存储过程,你说你不能创建它。
桌子怎么样?您是否可以创建表来传递受影响的ID?
但实施一个令人讨厌的功能只是一大笔开销。 ORA-04091异常几乎总是表明数据模型中存在缺陷,这似乎就是这种情况。