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需要大量的设置才能正常工作。对你所做的事情来说,这可能是过分的