在编译包体时触发触发器

时间:2015-10-29 06:37:50

标签: oracle plsql oracle11g

我有一个定期更新的包体。每当编译这个主体时,我需要在表中存储少量记录(user_name,time,few-other-data)。

有没有办法在编译包体时创建一个在表中插入数据的触发器?

1 个答案:

答案 0 :(得分:3)

您可以在架构上创建AFTER CREATE触发器。它将在每个模式对象创建后触发,但您可以使用ora_dict_obj_name等函数限制记录的内容。

查看here以查看AFTER CREATE触发器实际可用的功能。

示例触发器可能是:

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获取该视图中的完整操作列表。