【问题标题】:How to use COMMIT in Procedure called by trigger如何在触发器调用的过程中使用 COMMIT
【发布时间】:2014-06-11 07:06:47
【问题描述】:

我有下面的触发器(mytrg),它调用一个过程(myproc),如果表1中有任何插入,它将更新表2。在 table2 中更新数据后,我在过程中有“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;

需要知道如何提交更新。

谢谢

【问题讨论】:

    标签: sql stored-procedures plsql triggers


    【解决方案1】:

    您不能在触发器中包含 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;
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多