CREATE ON DATABASE触发器:如何访问对象源



我正在尝试为Oracle实现伪版本控制和存储库。其思想是:当更改存储函数/过程或创建全局DATABASE时触发触发器,它将获取修改对象的当前源并存储它们到一张桌子旁。所以我用了两个触发器:

TRIGGER BEFORE_MODIFY before ALTER or CREATE ON DATABASE
TRIGGER AFTER_MODIFY after ALTER or CREATE ON DATABASE

一切正常,除了AFTER_MODIFY触发器看到的是编译对象的旧版本(源代码)。我曾试图从SYS.SOURCE$.SOURCE获得来源,并作为dbms_metadata.get_ddl(OBJ_TYPE, OBJ_NAME, OBJ_OWNER)的第二次尝试,结果相同。

我正在寻找建议或明确的答案,如"你不能在Oracle 10g+中做到这一点"。

建议使用ora_sql_txt获取新代码:

create or replace TRIGGER AFTER_MODIFY after CREATE ON hr.SCHEMA 
declare
  sql_text ora_name_list_t;
  n number;
begin
  n := ora_sql_txt(sql_text);
  FOR i IN 1..n LOOP
   dbms_output.put_line(sql_text(i));
  END LOOP;
end;
/

最新更新