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
一重引用符が含まれていることが原因である場合、データをテーブルに挿入する前にこれをエスケープするにはどうすればよいですか?