2015-10-29 123 views
1

我有一個定期更新的包體。我需要在編譯本體時在表中存儲少量記錄(user_name,time,few-other-data)。編譯包體時觸發觸發器

有沒有什麼辦法可以創建一個觸發器,在編譯包體時將數據插入到表中?

+0

您可以將幾行添加到運行編譯的腳本。 – Rene

+0

我正在使用SQLDeveloper,因此不確定在哪裏查找「運行編譯的腳本」。 – 6055

+0

對我來說,你的問題似乎暗示了你想要記錄的一些自動化過程。 – Rene

回答

3

您可以在您的模式上創建AFTER CREATE觸發器。它會在每個架構對象創建後觸發,但是您可能會限制使用諸如ora_dict_obj_name之類的函數記錄的內容。

看看here來檢查觸發器實際上可用的功能。

樣本觸發可能是:

create table log_test (event_dt date, event_text varchar2(100)); 

create or replace trigger test_pkg_alter_log_trg 
after create on <YOUR_USER>.schema 
begin 
    insert into log_test(event_dt, event_text) 
    values (sysdate, ora_dict_obj_name); 
end; 

創建這樣的觸發將增加開銷任何CREATE行動,不只是你的包重新編譯。應該評估這些開銷是否符合您的需求。 Oracle已經帶有大多數(所有?)事件被記錄,所以我建議你也考慮一下例如DBA_AUDIT_TRAIL視圖(事件action in (94, 97, 95, 98))來檢查它是否可以用於你的目的。在該視圖中的完整行動列表可以通過select * from audit_actions獲得。