Как я могу заставить триггер совершить транзакцию - PullRequest
0 голосов
/ 14 января 2019

У меня есть ораторский триггер, где я вызываю процедуру, которая использует метод 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 голосов
/ 14 января 2019

Триггер не может зафиксировать (или откатить) транзакцию. Если вам нужно игнорировать любую ошибку вызванной процедуры, вам нужно добавить обработчик исключений :

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