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.