【问题标题】:Firing trigger on compilation of a package body编译包体时触发触发器
【发布时间】:2015-10-29 15:14:40
【问题描述】:

我有一个包体,它会定期更新。每当编译此正文时,我都需要在表中存储一些记录(用户名、时间、其他数据)。

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

【问题讨论】:

  • 您可以在运行编译的脚本中添加几行代码。
  • 我正在使用 SQLDeveloper,所以不确定在哪里可以找到“运行编译的脚本”。
  • 对我来说,您的问题似乎暗示了您想要记录的一些自动化过程。
  • 每当编译一个包体时,我想在一个表中存储一些信息。这是我的问题。

标签: oracle plsql oracle11g


【解决方案1】:

您可以在您的架构上创建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 获得该视图中的完整操作列表。

【讨论】:

    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多