Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tác dụng của việc đặt cam kết sau DML trong thủ tục là gì?

Hiệu quả của việc đặt cam kết như thế này trong chương trình là gì?

Tài liệu Oracle mô tả COMMIT như:

Mục đích

Sử dụng COMMIT tuyên bố kết thúc giao dịch hiện tại của bạn và thực hiện vĩnh viễn tất cả các thay đổi được thực hiện trong giao dịch. Một giao dịch là một chuỗi các câu lệnh SQL mà Cơ sở dữ liệu Oracle coi như một đơn vị duy nhất. Câu lệnh này cũng xóa tất cả các điểm lưu trong giao dịch và gia tăng các khóa giao dịch.

Nếu bạn có ba PROCEDURE và mỗi cái chứa một COMMIT khi đó bạn không thể chạy cả ba câu lệnh, nếu một ngoại lệ xảy ra trong câu lệnh thứ hai, hãy ROLLBACK tất cả chúng vì những thay đổi từ hai thay đổi đầu tiên sẽ là COMMIT ted.

Theo nguyên tắc chung, bạn không nên sử dụng COMMIT trong một PROCEDURE hoặc FUNCTION nhưng nên để người gọi COMMIT giao dịch để chúng có thể nhóm nhiều hành động lại với nhau.

Tất nhiên, có những trường hợp sử dụng mà bạn sẽ muốn vi phạm quy tắc này nhưng bạn nên xem xét từng trường hợp riêng biệt và dành thời gian để hiểu đầy đủ logic nghiệp vụ của mình trước khi vi phạm quy tắc này để bạn biết thế nào là COMMIT ted trong mỗi trường hợp.

Tôi có nên thực hiện giao dịch này bằng AUTONOMOUS_TRANSACTION không ?

Một ca sử dụng là ghi nhật ký - bạn có thể có PROCEDURE mà gọi một PROCEDURE khác để ghi nhật ký hành động của người dùng và, bất kể hành động ban đầu thành công hay thất bại, bạn muốn giữ nhật ký của hành động đó và đảm bảo nhật ký đó là COMMIT ted. Trong trường hợp này, PROCEDURE ghi nhật ký phải là AUTONOMOUS_TRANSACTION và chứa COMMIT câu lệnh và câu lệnh gọi không nên (có thể).

Vì vậy, nếu COMMIT của một PROCEDURE luôn được yêu cầu và không phụ thuộc vào việc người gọi có COMMIT hay không dữ liệu khác sau đó thực hiện PROCEDURE một AUTONOMOUS_TRANSACTION . Nếu PROCEDURE s có thể được nhóm lại với nhau và sau đó ROLLBACK với tư cách là một nhóm thì bạn không muốn đặt họ thành AUTONOMOUS_TRANSACTION s.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao một biến oracle plsql varchar2 cần một kích thước nhưng một tham số thì không?

  2. KEY NGOẠI LỆ VỀ XÓA Lỗi HẠN CHẾ - Oracle

  3. TEMPFILE Chế độ chờ vật lý ngoại tuyến

  4. Oracle - Bảng sao chép - Cấu trúc, ràng buộc dữ liệu và tất cả

  5. Hàm ABS () trong Oracle