Jeśli zdecydujesz się na własne logowanie i zalogowanie się do tabeli, możesz przejść do Transakcja autonomiczna trasa.
Transakcja autonomiczna to transakcja, która może zostać zatwierdzona niezależnie od bieżącej transakcji, w której się znajdujesz.
W ten sposób można rejestrować i zatwierdzać wszystkie potrzebne informacje w tabeli dziennika niezależnie od powodzenia lub niepowodzenia procedury składowanej lub transakcji nadrzędnej procesu wsadowego.
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;
/
Następnie, jeśli nazwiesz to w ten sposób, nadal możesz otrzymywać wiadomości zapisane w tabeli dziennika, nawet jeśli wystąpi niepowodzenie i cofniesz transakcję:
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żesz chcieć to uporządkować z wyjątkami, które mają sens dla twojego kodu, ale to jest ogólna idea, dane zapisane w wywołaniach SP_LOG pozostają, ale transakcję nadrzędną nadal można wycofać.