CREATE OR REPLACE TRIGGER AO_367_TGR_AIU AFTER INSERT OR UPDATE ON AO_367_TGR FOR EACH ROWDECLARE PRAGMA AUTONOMOUS_TRANSACTION; --Força que a trigger aceite commit / Existe commit dentro da procedure V_RES CHAR(1);BEGIN IF :NEW.STATUS = 'L' THEN DBMS_OUTPUT.PUT_LINE (:NEW.SAP_ID || ' - NEW: ' || :NEW.STATUS || ' - OLD: '|| :OLD.STATUS); EXECUTE IMMEDIATE 'BEGIN AO_COMP_SAP_X_GIS (:SAP_ID, :V_RES); END;' USING 120, OUT V_RES; |
quarta-feira, 15 de dezembro de 2010
Trigger – Execute Immediate (IN/OUT)
Por definição as Triggers não podem conter os comandos Commit ou Roolback, no exemplo abaixo, o comando Execute Immediate, chama uma procedure que, em seu código, possui os comandos Commit e Roolback, isso causa erro durante a execução da Trigger, para evitar esse problema usa-se a diretiva PRAGMA AUTONOMOUS_TRANSACTION, veja neste blog uma definição para esta diretiva.
OBS.: Não existe a necessidade de utilziar o comando Execute Immediate no script acima, isso foi utilizado apenas para exemplo de uma chamada de procedure com parâmetros IN e OUT.
Assinar:
Postar comentários
(
Atom
)
Nenhum comentário :
Postar um comentário