sql >> Databasteknik >  >> RDS >> Oracle

Logga felmeddelanden i Oracles lagrade procedur

Om du bestämmer dig för att skapa din egen loggning och logga in i en tabell kan du gå till Autonom transaktion rutt.

En autonom transaktion är en transaktion som kan utföras oberoende av den aktuella transaktionen du befinner dig i.

På så sätt kan du logga och överföra all information du vill ha till din loggtabell oberoende av framgång eller misslyckande med din lagrade procedur eller batchprocessföräldertransaktion.

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

Sedan om du kallar det så här, kan du fortfarande få meddelanden som skickas till din loggtabell även om du har ett fel och återställer din transaktion:

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

Du kanske vill städa upp det med undantag som är vettiga för din kod, men det är den allmänna idén, data som skrivits i anropen till SP_LOG kvarstår, men modertransaktionen kan fortfarande återställas.



  1. PostgreSQL:välja rader som inträffar en viss dag i veckan, i en specifik tidszon

  2. hur får man sql-utvecklare att visa icke-engelska tecken korrekt istället för att visa rutor?

  3. SQL:sök/ersätt men bara första gången ett värde visas i posten

  4. Vilka versioner av SQL Server stöder LINQ till SQL?