sql >> Databáze >  >> RDS >> Oracle

Protokolovat chybové zprávy v uložené proceduře Oracle

Pokud se rozhodnete zavést vlastní protokolování a přihlásit se do tabulky, můžete přejít na Autonomní transakci trasa.

Autonomní transakce je transakce, kterou lze provést nezávisle na aktuální transakci, ve které se nacházíte.

Tímto způsobem můžete protokolovat a odevzdávat všechny informace, které chcete, do tabulky protokolu nezávisle na úspěchu nebo selhání vaší uložené procedury nebo nadřazené transakce dávkového procesu.

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

Pak, když to nazvete takto, stále můžete dostávat zprávy potvrzené do vaší tabulky protokolů, i když dojde k selhání a vrátit transakci:

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

Možná to budete chtít uklidit výjimkami, které mají pro váš kód smysl, ale to je obecná myšlenka, data zapsaná ve voláních SP_LOG přetrvávají, ale nadřazenou transakci lze stále vrátit zpět.



  1. SQLBulkCopy s vložením identity do cílové tabulky

  2. Problémy s databází Laravel Homestead Vagrant Box

  3. Doktrína – Jak vytisknout skutečné sql, nejen připravené prohlášení?

  4. moje transakce není rollback, když se něco pokazí v C# s mysql?