Plsql 如何强制触发器提交事务

Plsql 如何强制触发器提交事务,plsql,oracle11g,database-trigger,Plsql,Oracle11g,Database Trigger,我有一个oracle触发器,在这里我调用一个使用UTL_HTTP方法的过程,我必须忽略任何错误并提交事务。我该怎么做呢 CREATE OR REPLACE TRIGGER TRG_MYTRIGGER BEFORE UPDATE OR INSERT ON MYTAB FOR EACH ROW DECLARE MY_STATUS NUMBER(10); BEGIN MY_PROCEDURE(PARAMS..., MY_STATUS); -- THIS IS OPTIONAL :

我有一个oracle触发器,在这里我调用一个使用UTL_HTTP方法的过程,我必须忽略任何错误并提交事务。我该怎么做呢

CREATE OR REPLACE TRIGGER TRG_MYTRIGGER
BEFORE UPDATE OR INSERT ON MYTAB
FOR EACH ROW 
DECLARE 
  MY_STATUS NUMBER(10);

BEGIN

  MY_PROCEDURE(PARAMS..., MY_STATUS); -- THIS IS OPTIONAL

  :NEW.MY_STATUS := MY_STATUS ;

END
触发器不能提交(或回滚)事务。如果需要忽略被调用过程的任何错误,则需要添加:


谢谢,这正是我正在寻找的解决方案。请注意,对UTL_HTTP或任何本质上不是事务性的东西的调用可能会被多次调用,即使是对一行的更新。不能假定触发器中的一行=一个调用。最好使用dbms_job.submit请求对UTL_HTTP的调用,因为该作业随后将与父事务一起创建和/或回滚
CREATE OR REPLACE TRIGGER TRG_MYTRIGGER
BEFORE UPDATE OR INSERT ON MYTAB
FOR EACH ROW 
DECLARE 
  MY_STATUS NUMBER(10);
BEGIN

  begin 
     MY_PROCEDURE(PARAMS..., MY_STATUS); -- THIS IS OPTIONAL
  exception 
    when others then 
      my_status := -42; -- signal an error through the status value
  end;

  :NEW.MY_STATUS := MY_STATUS;
END;
/