触发将逐个列连接到新表中

时间:2012-01-12 20:14:00

标签: oracle oracle10g

我有一个触发器,它通过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

如何使用触发器修复此问题? (不能使用存储过程,并且希望避免使用计划任务)。

1 个答案:

答案 0 :(得分:1)

  

“如何使用触发器修复此问题?”(无法使用存储过程和   我想避免使用预定的任务。“

使用触发器无法做到这一点。

您不能使用行级触发器,因为正如您所发现的那样,select会抛出变异表异常。

您无法使用表级触发器,因为我们无法在其中引用:NEW或:OLD值。

可以通过在行级触发器中填充命名空间变量来将:NEW或:OLD值传递给表级触发器,但是上下文需要一个存储过程,你说你不能创建它。

桌子怎么样?您是否可以创建表来传递受影响的ID?

但实施一个令人讨厌的功能只是一大笔开销。 ORA-04091异常几乎总是表明数据模型中存在缺陷,这似乎就是这种情况。