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