Ако решите да превъртите своя собствена регистрация и да влезете в таблица, може да отидете на автономна транзакция маршрут.
Автономната транзакция е транзакция, която може да бъде извършена независимо от текущата транзакция, в която се намирате.
По този начин можете да регистрирате и ангажирате цялата информация, която искате, към вашата журнална таблица, независимо от успеха или неуспеха на вашата съхранена процедура или родителска транзакция на партиден процес.
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;
/
След това, ако го извикате по този начин, все още можете да получавате съобщения, ангажирани към вашата журнална таблица, дори ако имате повреда и върнете транзакцията си:
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;
/
Може да искате да го подредите с изключения, които имат смисъл за вашия код, но това е общата идея, данните, записани в извикванията към SP_LOG, продължават, но родителската транзакция все още може да бъде върната назад.