Oracle AFTER / BEFORE CREATE ON DATABASE触发器:如何访问对象源

时间:2011-08-08 17:38:37

标签: oracle triggers database-trigger after-create

我正在尝试为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 +中做到这一点。”

1 个答案:

答案 0 :(得分:0)

建议您只使用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;
/