1

少数の列を(手動で||によって)連結するクエリがあります。そのうちの1つはXMLTYPEフィールドです(getClobVal()を呼び出します)。次のオプションを設定してsqlplusを使用してクエリ出力をスプールすると、次のようになります。

set long 30000;
set pagesize 0;
set feedback off;

すべてのコンテンツを希望どおりに取得しますが、cr / lfが80文字の後に、最初の行のコンテンツが60文字の後に20文字の空白で停止し、残りの行のコンテンツが40文字の後に40文字の空白で停止します。

追加した場合:

set linesize 120;

実際のコンテンツの後に空白を追加しても同じ結果が得られます(1行目に60文字の空白、1行の残りの行に80文字の空白)

sqlplusとスプーリングを使用して、大量のテキストを含むクエリの結果のcsv出力ファイルを作成することは可能ですか?

スプーリングでこれを行うのは理想的な方法ではないことを認識していますが、コマンドラインまたはバッチファイルを介して実行できる方法でこのcsvファイルを作成できる必要があります。

助言がありますか?

4

2 に答える 2

2

sqlplusの経験が豊富な同僚が、私が探していた結果をもたらす次のセットブロックを考え出しました。

set pagesize 0 echo off;
SET LINESIZE 30000 LONG 30000 LONGCHUNKSIZE 30000 Trimspool on;
于 2010-08-05T13:39:41.573 に答える
1

線のサイズを大きく設定できます。どのくらいの大きさかはオペレーティングシステムによって異なりますが、ほとんどのOSは最大32Kをサポートすると思います。これはWindowsからです。

SQL> set linesize 10000
SQL> set linesize 32767
SQL> set linesize 999999
SP2-0267: linesize option 999999 out of range (1 through 32767)
SQL>

それより長いXMLテキストがある場合は、運が悪いです。

SQL*Plusを使用している理由はわかりません。これは、データベースサーバーではなくクライアントで出力が必要なためですか、それともファイルを書き出す他の方法がわからないためですか?

サーバーに書き込むことができる場合は、別の方法があります。UTL_FILEにはまだ32767文字の行サイズ制限がありますが、少なくとも、タグの途中で行が途切れないように、プログラムによるウィザードを実行しています。

ただし、おそらく最善の解決策は、XMLDB機能の一部であるDBMS_XSLPROCESSOR.CLOB2FILE()を使用することです。


完全を期すために、copaXの同僚が推奨する関連するSQL*Plusパラメータは次のとおりです。

PAGE-これをゼロに設定すると、ヘッダーが抑制され、出力でのページスローが防止されます
ECHO-スクリプトの実行時にSQLステートメントを表示するかどうかを制御します

両方のPAGE' andECHO`は、出力に無関係なテキストが含まれないように設定されています。同じ理由で、次のパラメータが設定されることがよくあります

FEEDBACK-クエリの最後に行数を表示するかどうかを制御します

LONG-表示されるLONGテキストの量を
LONGCHUNKSIZE制御します-列が折り返される前に表示されるLONGテキストの量を制御します-行を値
TRIMSPOOLに右埋め込みする空白を削除しますLINESIZE

LONGLONGCHUNKSIZE列全体を1つの出力行に表示するには、同じ値に設定する必要があります。

これらすべてのパラメータとその他多くのパラメータがドキュメントで説明されています。

于 2010-08-05T11:00:46.593 に答える