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

Khôi phục trong PLSQL Exception

Đầu tiên, tôi giả sử chúng ta có thể bỏ qua các lỗi cú pháp (ví dụ:không có END LOOP , dbms_output.put_line cuộc gọi bị thiếu dấu nháy đơn đầu tiên, v.v.)

Về việc liệu có cần thiết phải khôi phục các thay đổi hay không, điều đó còn tùy thuộc.

Nói chung, bạn sẽ không có các cam kết tạm thời trong một vòng lặp. Đó nói chung là một kiến ​​trúc kém cả vì nó tốn kém hơn nhiều về I / O và thời gian trôi qua. Nó cũng làm cho việc viết mã có thể khởi động lại khó hơn nhiều. Điều gì xảy ra, chẳng hạn, nếu SELECT của bạn câu lệnh chọn 10 hàng, bạn phát hành (và cam kết) 5 bản cập nhật, và sau đó bản cập nhật thứ 6 không thành công? Cách duy nhất để có thể khởi động lại với hàng thứ 6 sau khi bạn đã sửa ngoại lệ là có một bảng riêng biệt nơi bạn đã lưu trữ (và cập nhật) tiến trình mã của mình. Nó cũng tạo ra vấn đề cho bất kỳ mã nào gọi khối này, sau đó phải xử lý trường hợp một nửa công việc đã được thực hiện (và đã cam kết) và nửa còn lại thì không.

Nói chung, bạn sẽ chỉ đặt các báo cáo kiểm soát giao dịch trong các khối ngoài cùng của mã của mình. Kể từ một COMMIT hoặc một ROLLBACK trong một thủ tục cam kết hoặc lùi lại bất kỳ công việc nào được thực hiện trong phiên cho dù nó có được thực hiện theo quy trình hay không, bạn cần hết sức thận trọng về việc thêm các báo cáo kiểm soát giao dịch. Bạn thường muốn để người gọi quyết định xem có cam kết hay quay lại. Tất nhiên, điều đó chỉ đi xa - cuối cùng, bạn sẽ ở trong khối ngoài cùng mà sẽ không bao giờ được gọi từ một số quy trình khác và bạn cần có quyền kiểm soát giao dịch phù hợp - nhưng đó là điều cần hết sức cảnh giác về việc bạn đang viết mã có thể được sử dụng lại hay không.

Trong trường hợp này, vì bạn có các cam kết tạm thời, tác động duy nhất của ROLLBACK của bạn sẽ là nếu câu lệnh cập nhật đầu tiên không thành công, công việc đã được thực hiện trong phiên của bạn trước khi gọi khối này sẽ được khôi phục lại. Cam kết tạm thời sẽ cam kết những thay đổi trước đó nếu câu lệnh cập nhật đầu tiên thành công. Đó là loại tác dụng phụ mà mọi người lo lắng khi họ nói về lý do tại sao các cam kết tạm thời và kiểm soát giao dịch trong các khối có thể sử dụng lại là vấn đề.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Thứ tự theo chuỗi, các số xuất hiện sau cùng

  2. Cách phân vùng theo tháng và nhóm các tháng trong một quý

  3. Chèn một dấu ngoặc kép trong JDBC cho Truy vấn SQL không hoạt động

  4. Oracle regex - không bắt đầu bằng và không kết thúc bằng

  5. CachedRowSet chậm hơn ResultSet?