【问题标题】:How can i force trigger commit the transaction我如何强制触发提交事务
【发布时间】:2019-06-08 06:04:15
【问题描述】:

我有一个 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 可能会更好,因为该作业将与父事务一起创建和/或回滚

标签: plsql oracle11g database-trigger


【解决方案1】:

触发器不能提交(或回滚)事务。如果需要忽略被调用过程的任何错误,需要添加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;
/

【讨论】:

  • 谢谢,我正在寻找的正是这个解决方案。开始开始
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2021-10-09
  • 2017-10-20
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多