0

plsqlスクリプトを作成しました。スクリプトは、いくつかの基準に基づいて複数のテーブルからデータをフェッチし、データをコンマ区切り形式にフォーマットします。現在、フェッチされるデータは、行数と行サイズの点で膨大です。そのデータをcsvファイルに入れたい。私は次のことをやってみました:

  1. DBMS_OUTPUT.PUT_LINEでスプールを使用します。DBMS_OUTPUT.ENABLEの制限は20000バイトのみであるため、私のレコードはスプールファイルの途中に表示されます。
  2. utl_fileを使用すると、csvファイルで取得できますが、問題は、データベースが他のマシンに(物理的に)存在し、アプリケーションが他のマシンに存在することです。したがって、plsqlスクリプトを起動すると、データベースマシンにそのファイルが作成されます。また、utl_fileでは、データベースマシン上にディレクトリオブジェクトを作成する必要があります。これは、まもなくセキュリティ上の懸念事項になります。

とにかく、plsqlスクリプトの出力をアプリケーションマシン(データベースマシンではない)にあるファイルにパイプできることはありますか?また、Javaなどの他のプログラミング言語でも解決策を提案できます。

4

1 に答える 1

0

いくつかのオプションがあります:

  1. dbms_output.enable にはオプションの引数 (バッファ サイズ) があります。デフォルトは 20,000 で、最大許容数は 1,000,000 です (Oracle 9i - 11g)。 dbms_output.enable(1000000);

  2. 十分なスペースがない場合は、PL/SQL ブロックを実行して、一度に目的の出力のチャンクのみを出力する必要がある場合があります。
  3. PL/SQL ブロックを SQL クエリとして書き直すことはできますか? 次に、sqlplus を使用している場合は、次のコマンドを実行して、出力をカンマ区切りにすることができます。

    set colsep ","

...次に、スプ​​ールを使用してクエリを実行します。

于 2012-11-20T22:25:19.333 に答える