pl sql:触发从另一个表插入数据

时间:2011-02-09 13:08:47

标签: plsql

有表OLD和类似的表,NEW。我想在填充表OLD的现有进程中插入一个触发事件,对于每个新插入的行,此事件也会将新插入的行插入到表NEW中。在触发器体内,我需要包含查询BELOW,它在插入NEW之前聚合OLD的值:

insert into NEW  
select (select a.id,a.name,a.address,b.jitter,a.packet,a.compo,b.rtd,a.dur from OLD a,
        select address,packet,compo, avg(jitter) as jitter, avg(rtd) as rtd from OLD
        group by address,packet,compo ) b
        where a.address=b.address and a.packet=b.packet and a.compo=b.compo;

你可以在下面的陈述中纠正任何可能的错误或建议其他触发句法吗?

创建或替换TRIGGER插入 在OLD上更新之后 对于每一行 开始     我上面的选择查询 端;

2 个答案:

答案 0 :(得分:0)

在每个行触发器中,您无法查询表本身。如果您这样做,您将收到一个变异表错误消息。 我建议只使用触发器来实现最基本的功能,例如分发ID号和非常基本的检查。 如果您确实使用触发器执行更复杂的任务,那么您可能很容易就会遇到一个非常难以调试和维护的系统,因为各种各样的操作都不可知。

请看另一种方法的问题:getting rid of Insert trigger

答案 1 :(得分:0)

Oracle Streams也可能是一个很好的解决方案。在apply处理程序中,您可以包含自己的自定义PL / SQL代码。这个过程将在COMMIT之后调用,因此您可以避免改变表错误。

但是,Streams需要大量设置才能使其正常工作。你正在做的事情可能有点过头了。