Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Registrar mensagens de erro no procedimento armazenado do Oracle


Se você decidir criar seu próprio registro e fazer login em uma tabela, você pode acessar a Transação Autônoma rota.

Uma Transação Autônoma é uma transação que pode ser confirmada independentemente da transação atual em que você está.

Dessa forma, você pode registrar e confirmar todas as informações desejadas em sua tabela de log, independentemente do sucesso ou falha do procedimento armazenado ou da transação pai do processo em lote.
CREATE OR REPLACE PROCEDURE "SP_LOG" (
    P_MESSAGE_TEXT VARCHAR2
) IS
  pragma autonomous_transaction;
BEGIN

    DBMS_OUTPUT.PUT_LINE(P_MESSAGE_TEXT);

    INSERT INTO PROCESSING_LOG (
        MESSAGE_DATE,
        MESSAGE_TEXT
    ) VALUES (
        SYSDATE,
        P_MESSAGE_TEXT
    );
    COMMIT;

END;
/

Então, se você chamá-lo assim, ainda poderá receber mensagens confirmadas em sua tabela de log, mesmo se houver uma falha e reverter sua transação:
BEGIN
  SP_LOG('Starting task 1 of 2');

  ... code for task 1 ...

  SP_LOG('Starting task 2 of 2');

  ... code for task 2 ...

  SP_LOG('Ending Tasks');

  ... determine success or failure of process and commit or rollback ... 

 ROLLBACK;
END;
/

Você pode querer arrumá-lo com exceções que façam sentido para o seu código, mas essa é a ideia geral, os dados gravados nas chamadas para SP_LOG persistem, mas a transação pai ainda pode ser revertida.