完成表中的数据插入后如何触发触发器

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中的触发器从另外两个表中插入一个表中的数据

您能否在视图上编写触发器,该视图在更改其基表后利用插入和删除表中的数据?

sql如何同时向两张表插入数据

如何在 SQL 中对触发器进行语法化,以便在插入后从同一个表中更新列(oracle 数据库)