2

Oracle の疑似バージョン管理とリポジトリを実装しようとしています。アイデアは、保存された関数/プロシージャが変更されたとき、または作成されたグローバル DATABASE トリガーが起動されたときです。これにより、変更されたオブジェクトの現在のソースが取得され、テーブルに保存されます。だから私は2つのトリガーを使用しています:

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 に答える