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.