2010-07-26 22 views
5

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 INSERTINGUPDATING (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_ERRORCOMMIT) thường được sử dụng trong mã PL/SQL.

+0

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? –

+0

@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ụ. –

Trả lời

9

Các chức năng INSERTING, UPDATING và DELETING được cung cấp rõ ràng để sử dụng trong mã kích hoạt bằng văn bản (xem trigger documentation), vì vậy hoàn toàn không có lời nhắc nào khi sử dụng chúng. Tương tự, RAISE_APPLICATION_ERROR là documented để các nhà phát triển sử dụng.

Chỉ có DESCribed DBMS_STANDARD có một số chức năng trong đó tôi không biết và có lẽ không nên được sử dụng trong mã của riêng bạn (cho tất cả những gì tôi biết) chẳng hạn như GRANTEE.

Nói chung, nếu bạn có thể tìm thấy tài liệu chính thức của Oracle cho bạn biết cách sử dụng thứ gì đó, thì bạn có thể sử dụng nó.

+0

Điểm tuyệt vời! Chúng tôi sẽ nói chuyện với Oracle để làm rõ. –

+1

Tôi nghi ngờ một nhà phân tích cấp 1 cho biết "aha, DBMS_STANDARD không được ghi chép và sổ tay dandy tiện dụng của tôi cho khách hàng không sử dụng các thông số hoặc tính năng không có tài liệu mà không có hướng dẫn của chúng tôi". –

Các vấn đề liên quan