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

Plsql pl sql:从另一个表插入数据的触发器,plsql,Plsql,有一张旧桌子和一张类似的新桌子。我想在填充旧表的现有进程中插入一个触发器事件,对于每个新插入的行,该事件也会将新插入的行插入到新表中。在触发器的主体中,我需要包含以下查询,该查询在插入新触发器之前聚合旧触发器的值: 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,

有一张旧桌子和一张类似的新桌子。我想在填充旧表的现有进程中插入一个触发器事件,对于每个新插入的行,该事件也会将新插入的行插入到新表中。在触发器的主体中,我需要包含以下查询,该查询在插入新触发器之前聚合旧触发器的值:

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;
您是否可以更正任何可能的错误,或在下面的语句中建议其他触发器语法

创建或替换触发器插入 更新旧版本后 每行 开始 我选择上面的查询
结束

在for each row触发器中,不能查询表本身。如果您这样做,您将得到一条变异表错误消息。 我建议只对最基本的功能使用触发器,例如分发ID号和非常基本的检查。 如果您确实为更复杂的任务使用触发器,那么您可能很容易得到一个很难调试和维护的系统,因为这里出现了各种各样的操作


另一种方法是看这个问题:

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

但是,Streams需要大量的设置才能正常工作。对你所做的事情来说,这可能是过分的