sql >> Base de Datos >  >> RDS >> Oracle

Registrar mensajes de error en el procedimiento almacenado de Oracle

Si decide realizar su propio registro e iniciar sesión en una tabla, puede ir a Transacción autónoma ruta.

Una transacción autónoma es una transacción que puede comprometerse independientemente de la transacción actual en la que se encuentre.

De esa manera, puede registrar y enviar toda la información que desee a su tabla de registro independientemente del éxito o fracaso de su procedimiento almacenado o transacción principal de proceso por lotes.

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

Luego, si lo llama así, aún puede recibir mensajes confirmados en su tabla de registro incluso si tiene una falla y revierte su transacción:

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

Es posible que desee ordenarlo con excepciones que tengan sentido para su código, pero esa es la idea general, los datos escritos en las llamadas a SP_LOG persisten, pero la transacción principal aún se puede revertir.