Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Fehlermeldungen in der gespeicherten Oracle-Prozedur protokollieren

Wenn Sie sich entscheiden, Ihre eigene Protokollierung durchzuführen und sich in eine Tabelle einzuloggen, können Sie die Autonome Transaktion wählen Route.

Eine autonome Transaktion ist eine Transaktion, die unabhängig von der aktuellen Transaktion, in der Sie sich befinden, festgeschrieben werden kann.

Auf diese Weise können Sie alle gewünschten Informationen protokollieren und in Ihre Protokolltabelle schreiben, unabhängig vom Erfolg oder Misserfolg Ihrer gespeicherten Prozedur oder Ihrer übergeordneten Batch-Prozess-Transaktion.

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

Dann, wenn Sie es so nennen, können Sie immer noch Nachrichten in Ihre Protokolltabelle schreiben lassen, selbst wenn Sie einen Fehler haben, und Ihre Transaktion rückgängig machen:

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

Vielleicht möchten Sie es mit Ausnahmen aufräumen, die für Ihren Code sinnvoll sind, aber das ist die allgemeine Idee, die in den Aufrufen von SP_LOG geschriebenen Daten bleiben bestehen, aber die übergeordnete Transaktion kann immer noch zurückgesetzt werden.