Nâng caoOracle PL/SQL ~14 phút

Procedure và transaction boundary

Procedure thực hiện DML không đồng nghĩa nó phải tự COMMIT; ranh giới transaction thường thuộc service hoặc caller điều phối toàn bộ workflow.

Lý thuyết

Ai sở hữu transaction?

Reusable procedure nên thực hiện công việc và trả lỗi; caller quyết định COMMIT khi toàn bộ use case thành công.

Nếu procedure A tự COMMIT rồi procedure B lỗi, caller không thể rollback A — transaction bị chia vụn.

Exception không tự rollback toàn bộ

Một statement lỗi được rollback ở mức statement. Những DML trước đó trong transaction vẫn pending cho tới khi caller COMMIT hoặc ROLLBACK.

SAVEPOINT

SAVEPOINT ten;ROLLBACK TO ten; cho phép hoàn tác một phần mà vẫn giữ phần trước savepoint.

DDL

CREATE/ALTER/DROP gây implicit commit trước và sau DDL trong Oracle. Không trộn DDL tùy tiện vào workflow transaction.

Autonomous transaction

PRAGMA AUTONOMOUS_TRANSACTION tạo transaction độc lập, thường dùng cho audit logging. Nó phải tự COMMIT/ROLLBACK và cần dùng rất thận trọng.

Quy tắc mặc định tốt: không COMMIT trong procedure business dùng lại; ghi rõ nếu procedure cố ý sở hữu transaction.

Thuật ngữ (di chuột để xem giải thích)

Dữ liệu mẫu

Đang tải dữ liệu mẫu…