我如何强制触发提交交易

时间:2019-01-14 09:00:39

标签: 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

  :NEW.MY_STATUS := MY_STATUS ;

END

1 个答案:

答案 0 :(得分:2)

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

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;
/