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.