微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

触发器内不能有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;

解决方法

我有下面的触发器(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;

需要知道如何提交更新。

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。