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

Cách tránh lỗi ORA-04091 trong trình kích hoạt

Bạn có thể yêu cầu trình kích hoạt trên A làm điều gì đó để cảnh báo trình kích hoạt trên B rằng nó không cần phải kích hoạt. Có nhiều người muốn thiết lập một số trạng thái cho một phiên. Cách tiếp cận đơn giản nhất có thể thực hiện là tạo một gói với biến boolean bypass_checks_on_b mà bạn đặt thành TRUE trước khi bạn thực hiện UPDATE trên A, đặt thành FALSE một lần UPDATE hoàn thành, và sau đó kiểm tra trạng thái của biến này trong trình kích hoạt của bạn trên B trước khi thực hiện xác thực của bạn. Bạn cũng có thể làm điều gì đó tương tự với một bảng tạm thời hoặc một ngữ cảnh hơn là sử dụng một gói. Kém hiệu quả hơn, bạn có thể phân tích cú pháp ngăn xếp cuộc gọi bên trong trình kích hoạt của bạn trên B để xem liệu trình kích hoạt trên A có nằm trong ngăn xếp cuộc gọi hay không nhưng điều đó sẽ có xu hướng khá xấu.

Tuy nhiên, tôi sẽ rất thận trọng về toàn bộ kiến ​​trúc này. Khi bạn nhận thấy rằng bạn có trình kích hoạt trên A khiến trình kích hoạt trên B kích hoạt muốn truy vấn A, hầu như luôn luôn xảy ra trường hợp bạn đặt quá nhiều logic vào trình kích hoạt và bạn sẽ được phục vụ tốt hơn nhiều. logic đó vào một lớp thủ tục được lưu trữ có thể được gọi thay vì các ứng dụng thực hiện chèn hoặc cập nhật trực tiếp. Khi bạn đẩy quá nhiều logic vào các trình kích hoạt, bạn sẽ kết thúc với một hệ thống rất khó hiểu vì nhìn vào mã ứng dụng sẽ không rõ ràng là các câu lệnh khác nhau có tác dụng phụ gì. Và bạn kết thúc với mã rất trạng thái, nơi bạn có nhiều đường dẫn thông qua một đoạn mã duy nhất tùy thuộc vào người gọi. Điều đó gần như chắc chắn có nghĩa là sẽ có những trạng thái mà bạn không kiểm tra hoặc không nghĩ về nơi bạn sẽ phát hiện ra rằng mã của bạn làm điều gì đó không mong muốn. Giữa việc có rất nhiều trạng thái và có một cơ sở mã với vô số tác dụng phụ, bạn có thể nhanh chóng xây dựng một cơ sở mã về cơ bản là không thể xác định được.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn đệ quy SQL trên bảng tự tham chiếu (Oracle)

  2. Thực thi ngay không thành công ngay cả khi cấp bảng CREATE

  3. Mẫu sử dụng bộ nhớ lạ trong ứng dụng C # Windows Form

  4. Tổng hợp chuỗi Oracle

  5. Mệnh đề WHERE có điều kiện với câu lệnh CASE trong Oracle