-
使用しているOracleバージョンを投稿してください。または、推測することもできます...
-
fflush
期待どおりに機能しません-ドキュメント> : FFLUSHは、ファイルハンドルで識別されるファイルに保留中のデータを物理的に書き込みます。通常、ファイルに書き込まれるデータはバッファリングされます。 FFLUSHプロシージャは、バッファリングされたデータをファイルに強制的に書き込みます。 データは改行文字で終了する必要があります。
-
tboneは絶対に正しいですTO_CHAR(10)の行は間違っています!
SELECT TO_CHAR(10) FROM DUAL;
を試してみてください10
を取得します 次に、これを1つの文字と比較します。 10には2つの文字があるため、1つの文字が「10」になることはありません! -
問題は、XMLファイルが大きすぎるバッファオーバーフローである可能性が高いですが、ターゲットシステム上の他の問題もwrite_errorsにつながる可能性があることに注意してください。これは、処理する必要があります。
ソリューション
-
クイック&ダーティ :とにかくパフォーマンスを気にしないようですので、Xバイトごとにファイルを閉じて、追加のためにAで再度開くことができます。したがって、ループに追加するだけです:
IF MOD( l_offset, 32000 ) = 0 THEN UTL_FILE.FCLOSE( f_out ); UTL_FILE.FOPEN( out_fpath, out_fname, f_out, 'a', 32767 ); END IF;
-
適切な仕事に適切なツールを使用する:
UTL_FILE
複雑なデータの処理には適していません。 UTL_FILEの唯一のユースケースは、改行で区切られた小さなテキスト行です。それ以外の場合は、RAWバイトを書き込む必要があります。 (これにより、現在はミニバニリーラッキーゲスであるENCODINGをより適切に制御することもできます) -
NIO-Filechannelsを使用してJavaストアドプロシージャを作成します-高速、安全、優れています...ただし、プログラムは10倍の速度で実行される可能性があることに注意してください!