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.