Gần đây, tôi đã gặp phải một kích hoạt BEFORE INSERT OR UPDATE
trên bàn. Trong trình kích hoạt này, tác giả dựa vào các hàm INSERTING
và UPDATING
(cả trả lại BOOLEAN
) của gói DBMS_STANDARD
để xác định xem trình kích hoạt có được kích hoạt trước khi chèn hoặc trước khi cập nhật hay không.Các thủ tục và/hoặc chức năng của gói DBMS_STANDARD có được sử dụng trong mã PL/SQL không?
Ví dụ:
CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
BEFORE INSERT OR UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
IF INSERTING THEN
/* Some code */
END IF;
IF UPDATING THEN
/* Some other code */
END IF;
END;
Vâng, tôi biết rằng hai, trigger cá nhân có thể đã được viết để xử lý hai sự kiện riêng biệt. Đó không phải là điểm của câu hỏi này.
Sau khi khắc phục sự cố khi nhận được các chức năng này, chúng tôi nhận được từ (từ bộ phận Hỗ trợ của Oracle) rằng "dbms_standard thường không thực sự được gọi bởi chương trình người dùng". Điều này có đúng không?
Tôi thấy điều này hơi lạ, xem xét các quy trình khác (chẳng hạn như RAISE_APPLICATION_ERROR
và COMMIT
) thường được sử dụng trong mã PL/SQL.
Bạn có ghi chú metalink hay một thứ gì khác mà công chúng (hoặc ít nhất là công chúng được Oracle cấp phép) có thể xem? Và nếu không sử dụng các lệnh INSERTING/UPDATING đến STANDARD trong trigger, chính xác khi nào chúng sẽ được sử dụng? –
@Adam: Không, lời khuyên này không đến từ ghi chú Metalink. Thay vào đó, nó đến trực tiếp từ Oracle Support trên một yêu cầu dịch vụ. –