0

6 つのテスト環境と 1 つの運用環境があります。Oracle ビューとしてかなりの数の異なるレポートを作成しており、これらを環境間で同期する方法が必要です。

実行できるスクリプトを作成しようとしています。これは基本的に、必要なビュー/パブリック シノニムと権限を作成するために別の環境にコピー アンド ペーストできるコマンドのリストを出力します。

dbms_output.put_line表示できる文字数に一定の制限があるため、結果のテキストをデータベーステーブルに配置する必要があります。

私は次のものを持っていますが、データを挿入しようとすると、ORA-06502: PL/SQL: numeric or value error. これはおそらく文字リテラルがエスケープされていないことと関係があると思います。

CREATE OR REPLACE PROCEDURE EXPORT_REPORTS AS
  statements CLOB;
  tmp_statement CLOB;


  CURSOR all_views IS
     SELECT
      OWNER,
      VIEW_NAME,
      TEXT
    FROM
      ALL_VIEWS
    WHERE
      OWNER = 'PAS'
  ;
BEGIN
  FOR v IN all_views LOOP
    tmp_statement := 'CREATE OR REPLACE FORCE VIEW "' || v.OWNER || '"."' || v.VIEW_NAME || '" AS ' || CHR(13) || CHR(10) || v.TEXT;
    statements := statements || tmp_statement;
  END LOOP;
  EXECUTE IMMEDIATE 'INSERT INTO VIEW_EXPORTS VALUES ('''|| statements || ''')';
END EXPORT_REPORTS;

これを試して修正するために何ができるか考えていますか? 変数内のテキストの一部にstatements一重引用符が含まれていることが原因である場合、データをテーブルに挿入する前にこれをエスケープするにはどうすればよいですか?

4

2 に答える 2

0

これは Data Pump の仕事のように思えます。

Oracle Data Pumpテクノロジにより、データベース間でデータとメタデータを非常に高速に移動できます。

http://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_overview.htm

データベース オブジェクトの DDL を取得するには、DBMS_METADATA パッケージを使用することをお勧めします。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm#BGBDJAHH

于 2013-01-08T20:49:18.830 に答える
-1

CLOB をローカル変数のデータ型として使用することはできません。代わりに VARCHAR を使用してください

于 2013-01-08T02:54:36.547 に答える