обновить ту же запись, которая запускает триггер - PullRequest
0 голосов
/ 29 октября 2010

Я хочу обновить ту же запись, которая запускает триггер. Я сделал это, используя "ДО ВСТАВКИ" вариант. Но обратите внимание, что я использовал транзакцию для отката операции, если есть какое-либо сбой.

CREATE OR REPLACE TRIGGER GANUKA.INTF_CONTROLLER_UPLOADER
BEFORE insert ON GANUKA.INTF_CONTROLLER for each row
DECLARE 
    PRAGMA AUTONOMOUS_TRANSACTION;
    max_id INTEGER;
    stat VARCHAR2(32);
begin

select :new.id into max_id from dual;
select :new.status into stat from dual;



 IF STAT = 'NEW' THEN   --ONLY NEW UPLOADS WILL CONTINUE FOR PROCESS
    :NEW.STATUS := 'STARTED';
     max_id := GANUKA.BACKOFFICE_UPDATE(max_id); --PL/SQL function
    :NEW.STATUS := 'COMPLETED';

ELSE
   :NEW.STATUS := 'ABORTED';
    :NEW.REMARKS :='STATUS IS NOT RECONGNIZED';

END IF;

COMMIT;

EXCEPTION
    WHEN OTHERS
     THEN
       ROLLBACK;
        RAISE;

end;
/

Проблема в том, что если есть какое-либо исключение, я хочу обновить запись, чтобы установить состояние как «Сбой». Может кто-нибудь сказать мне, как это сделать.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

Это делает это?

CREATE OR REPLACE TRIGGER GANUKA.INTF_CONTROLLER_UPLOADER
BEFORE insert ON GANUKA.INTF_CONTROLLER for each row
DECLARE 
    max_id INTEGER;
    stat VARCHAR2(32);
begin

 max_id := :new.id;
 stat := :new.status;

 IF STAT = 'NEW' THEN   --ONLY NEW UPLOADS WILL CONTINUE FOR PROCESS
    DECLARE 
      PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
      max_id := GANUKA.BACKOFFICE_UPDATE(max_id); --PL/SQL function
      COMMIT;
      :NEW.STATUS := 'COMPLETED';
    EXCEPTION
      WHEN OTHERS THEN
        ROLLBACK;
        :new.status := 'FAILED';
    END;

 ELSE
    :NEW.STATUS := 'ABORTED';
    :NEW.REMARKS :='STATUS IS NOT RECONGNIZED';

 END IF;

end;
/
0 голосов
/ 29 октября 2010

Я не уверен, почему вы используете здесь автономную транзакцию и почему вы должны совершать / откатывать в триггере ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...