2

我正在尝试为 Oracle 实现伪版本控制和存储库。这个想法是:当存储的函数/过程被更改或创建的全局数据库触发器被触发时,它将获取修改对象的当前源并将它们存储到表中。所以我使用了两个触发器:

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+ 中做到这一点”。

4

1 回答 1

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;
/
于 2011-08-09T01:41:34.533 回答