【问题标题】:pl sql: trigger for insert data from another tablepl sql:从另一个表插入数据的触发器
【发布时间】:2011-06-24 03:13:49
【问题描述】:

有 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;

您能否更正任何可能的错误或在下面的语句中建议其他触发器语法?

创建或替换触发器插入 在 OLD 更新后 对于每一行 开始 上面我的选择查询 结束;

【问题讨论】:

    标签: plsql


    【解决方案1】:

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

    但是,Streams 需要进行大量设置才能正常工作。对于你正在做的事情来说,这可能有点矫枉过正。

    【讨论】:

      【解决方案2】:

      在 for each row 触发器中,您不能查询表本身。如果这样做,您将收到一条变异表错误消息。 我建议仅将触发器用于最基本的功能,例如分发 ID 号和非常基本的检查。 如果您确实将触发器用于更复杂的任务,那么您很容易最终得到一个系统,该系统非常难以调试和维护,因为各种动作似乎都在这里不为人知。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2019-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多