有表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上更新之后 对于每一行 开始 我上面的选择查询 端;
答案 0 :(得分:0)
在每个行触发器中,您无法查询表本身。如果您这样做,您将收到一个变异表错误消息。 我建议只使用触发器来实现最基本的功能,例如分发ID号和非常基本的检查。 如果您确实使用触发器执行更复杂的任务,那么您可能很容易就会遇到一个非常难以调试和维护的系统,因为各种各样的操作都不可知。
请看另一种方法的问题:getting rid of Insert trigger
答案 1 :(得分:0)
Oracle Streams也可能是一个很好的解决方案。在apply处理程序中,您可以包含自己的自定义PL / SQL代码。这个过程将在COMMIT之后调用,因此您可以避免改变表错误。
但是,Streams需要大量设置才能使其正常工作。你正在做的事情可能有点过头了。