sql >> Database >  >> RDS >> Oracle

Log foutmeldingen in Oracle opgeslagen procedure

Als u besluit uw eigen logboekregistratie te gebruiken en in te loggen op een tabel, kunt u de Autonome transactie gebruiken route.

Een Autonome Transactie is een transactie die kan worden uitgevoerd onafhankelijk van de huidige transactie waarin u zich bevindt.

Op die manier kunt u alle gewenste informatie loggen en vastleggen in uw logtabel, onafhankelijk van het slagen of mislukken van uw opgeslagen procedure of de bovenliggende transactie van het batchproces.

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

Als je het dan zo noemt, kun je nog steeds berichten krijgen die zijn vastgelegd in je logtabel, zelfs als je een fout hebt en je transactie terugdraaien:

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

Misschien wilt u het opruimen met uitzonderingen die logisch zijn voor uw code, maar dat is het algemene idee, de gegevens die zijn geschreven in de aanroepen naar SP_LOG blijven bestaan, maar de bovenliggende transactie kan nog steeds worden teruggedraaid.



  1. Een database importeren en exporteren via SSH

  2. Verbind verschillende Windows-gebruikers in SQL Server Management Studio (2005 of later)

  3. Django ConnectionAbortedError:[WinError 10053] Een tot stand gebrachte verbinding is afgebroken door de software op uw hostcomputer

  4. PostgreSQL hoe u kunt zien welke query's zijn uitgevoerd