Jika Anda memutuskan untuk menggulung log Anda sendiri dan masuk ke tabel, Anda dapat membuka Transaksi Otonom rute.
Transaksi Otonom adalah transaksi yang dapat dilakukan secara independen dari transaksi saat ini yang Anda lakukan.
Dengan cara itu Anda dapat mencatat dan memasukkan semua info yang Anda inginkan ke tabel log Anda terlepas dari keberhasilan atau kegagalan prosedur tersimpan atau transaksi induk proses batch.
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;
/
Kemudian jika Anda menyebutnya seperti ini, Anda masih bisa mendapatkan pesan yang dikomit ke tabel log Anda bahkan jika Anda mengalami kegagalan dan mengembalikan transaksi Anda:
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;
/
Anda mungkin ingin merapikannya dengan pengecualian yang masuk akal untuk kode Anda, tetapi itu adalah ide umum, data yang tertulis dalam panggilan ke SP_LOG tetap ada, tetapi transaksi induk masih dapat dibatalkan.