完成表中的数据插入后如何触发触发器
Posted
技术标签:
【中文标题】完成表中的数据插入后如何触发触发器【英文标题】:How to fire a trigger after finishing data insert in a table 【发布时间】:2011-12-30 07:24:07 【问题描述】:我有一个table A
我正在向其中插入数据。然后进行一些计算以更新相同的table A
。
我想触发一个触发器,它在数据插入完成后(插入和更新后)调用Procedure A
。
我该怎么做?
有没有其他方法可以自动完成...或者我必须在table A
中完成数据插入后手动运行Procedure A
。
更简单地说,我想知道如何在插入几行和一次提交后触发触发器,即不是针对每一行。
【问题讨论】:
为什么更新后触发器对您没有帮助? (不是每个;一个语句触发器) 【参考方案1】:您可以定义为每行或每条语句触发的触发器(FOR EACH ROW 选项)。
如果我没听错的话,你想在一堆语句之后触发触发器吗?不要以为你可以。即使可以,我也宁愿不做。它们分散了您的程序流程/逻辑,使您以后更难理解您的软件是如何工作的。
问候
【讨论】:
我认为你是对的......我也没有在互联网上找到任何东西......会尝试任何其他选择......无论如何谢谢......【参考方案2】:如果我正确理解了您的问题,您希望触发器在您完成包含多个插入/更新语句的事务后触发?如果是这种情况,我认为您应该考虑在插入/更新操作完成后立即在程序流程中调用您的Procedure A
。
换句话说:触发器只有在应该为每一行或每条语句调用时才有用。
【讨论】:
【参考方案3】:在表格中添加一列:例如“FINAL_ACTION”。在您预期的最终操作之前,请保持此列不变。然后让你的触发器只用这个子句触发:
REFERENCING NEW AS NEWREC OLD AS OLDREC
FOR EACH ROW
WHEN (NEWREC.FINAL_ACTION <> OLDREC.FINAL_ACTION)
DECLARE
--YOUR DECLARATIONS
BEGIN
--DO SOMETHING
END;
【讨论】:
以上是关于完成表中的数据插入后如何触发触发器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 phpmyadmin 中创建触发器,插入后将更新花药表中的字段?
如何使用oracle中的触发器从另外两个表中插入一个表中的数据