Nếu bạn quyết định ghi nhật ký của riêng mình và đăng nhập vào một bảng, bạn có thể chuyển sang mục Giao dịch tự động tuyến đường.
Giao dịch tự trị là giao dịch có thể được cam kết độc lập với giao dịch hiện tại mà bạn đang thực hiện.
Bằng cách đó, bạn có thể đăng nhập và cam kết tất cả thông tin bạn muốn vào bảng nhật ký của mình một cách độc lập với sự thành công hay thất bại của quy trình đã lưu trữ của bạn hoặc giao dịch gốc của quy trình hàng loạt.
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;
/
Sau đó, nếu bạn gọi nó như thế này, bạn vẫn có thể nhận được thông báo được cam kết vào bảng nhật ký của mình ngay cả khi bạn gặp lỗi và khôi phục giao dịch của mình:
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;
/
Bạn có thể muốn dọn dẹp nó bằng các ngoại lệ có ý nghĩa đối với mã của bạn, nhưng đó là ý tưởng chung, dữ liệu được ghi trong các lệnh gọi tới SP_LOG vẫn tồn tại, nhưng giao dịch mẹ vẫn có thể được khôi phục lại.