Oracle
 sql >> Base de données >  >> RDS >> Oracle

Consigner les messages d'erreur dans la procédure stockée Oracle

Si vous décidez de lancer votre propre journalisation et de vous connecter à une table, vous pouvez accéder à la transaction autonome itinéraire.

Une transaction autonome est une transaction qui peut être validée indépendamment de la transaction en cours dans laquelle vous vous trouvez.

De cette façon, vous pouvez consigner et valider toutes les informations souhaitées dans votre table de journal, indépendamment du succès ou de l'échec de votre procédure stockée ou de la transaction parente du traitement par lots.

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

Ensuite, si vous l'appelez comme ceci, vous pouvez toujours recevoir des messages validés dans votre table de journal même si vous rencontrez un échec et annulez votre transaction :

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

Vous voudrez peut-être le ranger avec des exceptions qui ont du sens pour votre code, mais c'est l'idée générale, les données écrites dans les appels à SP_LOG persistent, mais la transaction parente peut toujours être annulée.