我有一个定期更新的包体。每当编译这个主体时,我需要在表中存储少量记录(user_name,time,few-other-data)。
有没有办法在编译包体时创建一个在表中插入数据的触发器?
答案 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
获取该视图中的完整操作列表。