当前位置: 首页 > 面试题库 >

如何在触发器调用的过程中使用COMMIT

滕学义
2023-03-14
问题内容

我有下面的触发器(mytrg),它调用一个过程(myproc),如果在table1中有任何插入,它将更新table2。在表2中更新数据后,我在过程中有“
COMMIT”语句。但是当在table1中有一个插入时,我得到以下错误。

Error report:
SQL Error: ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "myschema.myproc", line 63
ORA-06512: at "myschema.mytrg", line 2
ORA-04088: error during execution of trigger 'myschema.mytrg'
04092. 00000 -  "cannot %s in a trigger"
*Cause:    A trigger attempted to commit or rollback.
*Action:   Rewrite the trigger so it does not commit or rollback.

**Trigger:**                                                                                        
create or replace
trigger mytrg
after insert on table1
for each row
begin
myschema.myproc(:new.ID, :new.NAME, :new.TYPE_CODE, :new.LANGUAGE);
end;

需要知道如何提交更新。

谢谢


问题答案:

触发器内不能有COMMIT。提交对table1的INSERT后,将立即提交您的UPDATE。

但是要实现您想要的目标,您可以使用自主事务。例如,

CREATE OR REPLACE TRIGGER mytrg
AFTER INSERT ON table1 FOR EACH ROW

DECLARE    
   PRAGMA AUTONOMOUS_TRANSACTION;    
BEGIN    
   myschema.myproc(:new.ID, :new.NAME, :new.TYPE_CODE, :new.LANGUAGE);    
   COMMIT;    
END;


 类似资料:
  • 我知道这是非常不受赞扬的, 我知道这是一个性能、速度等方面的问题,但这是一个集成问题,他们只通过mysql进行更新(我知道这样做也很疯狂,但我无法改变他们所做的,他们正在进行大量的销售,所以他们不想改变任何事情)。 我只需要发布到一个URL(它可以像http://www.google.com?id=skuid) 我读了这个博客和堆栈,但他们是2岁,想知道是否有替代使用udf: http://ope

  • 问题内容: 有人告诉我,我需要在触发器中使用定界符。我正在查看MySQL手册页,并在示例中找到了它。但是,它不在通用文档中。 这是我要纠正的代码: 老实说,我不知道如何执行此操作,并且http://dev.mysql.com/doc/refman/5.5/en/create- trigger.html上 的文档似乎是一个非常不足的参考。例如,当阅读“ ”和“ ”时,它引用“ ”-与触发器关联的表。

  • 问题内容: 这与我的问题有关如何处理jQueryAJAX调用中的错误有关。一些响应建议我使用“错误”回调来显示来自jQuery AJAX调用的任何错误。我想知道如何使用ASP.NET MVC做到这一点。有没有一种方法可以让我的控制器操作返回可从“错误”回调中访问的错误?客户端代码如下所示: 问题答案: 注意:嗨,这是在ASP.Net MVC甚至达到1.0之前发布的,从那时起我什至没有研究框架。您可

  • 问题内容: 我知道这是非常不推荐的 我知道这是性能,速度等方面的问题,但这是为了集成,他们只通过mysql进行更新(我知道这样做也是很疯狂的,但我无法更改其工作方式,进行大量销售,因此他们不想更改任何东西)。 我只需要发布到一个URL(它可以像http://www.google.com?id=skuid一样简单) 我阅读了这些博客和堆栈,但是它们已有2年以上的历史了,想知道是否可以使用udf替代方

  • 有没有人知道某种方法可以触发具有 Blob 触发器的 Azure 函数?无论是通过API还是使用“测试/运行”功能。 情况是,我需要在测试目的中这样做。目前我看到的是,可以在blob存储中提供要触发的文件的名称。但这是无用的,因为无论如何,将文件放在那里都会触发功能。我想做的是为文件的内容而不是名称提供功能,以避免不必要的操作。 不幸的是,微软在所有相关主题上的留档很差,但这个没有。在这个gith