Oracle
 sql >> Database >  >> RDS >> Oracle

Registrare i messaggi di errore nella stored procedure Oracle

Se decidi di eseguire la tua registrazione e di accedere a una tabella, potresti passare alla Transazione autonoma percorso.

Una transazione autonoma è una transazione che può essere eseguita indipendentemente dalla transazione corrente in cui ti trovi.

In questo modo è possibile registrare e confermare tutte le informazioni desiderate nella tabella di registro indipendentemente dall'esito positivo o negativo della procedura memorizzata o della transazione padre dell'elaborazione batch.

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

Quindi, se lo chiami in questo modo, puoi comunque ricevere messaggi impegnati nella tabella di registro anche in caso di errore e ripristinare la transazione:

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

Potresti voler riordinarlo con eccezioni che hanno senso per il tuo codice, ma questa è l'idea generale, i dati scritti nelle chiamate a SP_LOG persistono, ma la transazione padre può ancora essere annullata.