[Oracle] UTL_FILE.GET_LINE で改行コードの一部が読み込まれる! | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

UTL_FILE パッケージを使ってファイルを読み込む場合、GET_LINE プロシージャを使って1行ずつ読み込むのが一般的です。

この時、改行コードは Oracle が自動的に取り除いてくれるわけですが、先日奇妙な現象に遭遇しました。

Linux 環境において UTF-8 で改行コードが CRLF(0x0D 0x0A)のファイルを読み込んだところ、CR(0x0D)が取り除かれずにレコードの終端文字として読み込まれてしまったのです。


同じ UTF-8 のファイルでも改行コードが LF(0x0A)のファイルの場合は問題なく読み込むことができますし、Windows 環境においては CRLF であろうが LF であろうが問題なく読み込むことができます。

どうやら Linux 環境においては改行コードが LF のファイルしか正しく読み込めないようです。


この問題を回避するには Linux 環境において UTL_FILE で読み込むファイルの改行コードは LF で統一しておいたほうがよさそうです。


どうしても改行コードが CRLF のファイルを読み込まなければならない場合は、レコードの終端にくっついた CR を読み込んだ後で取り除くしかありません。




【関連エントリ】
[Oracle] テキストファイルの入出力方法 2004/07/14
[Oracle] Linux環境でのUTL_FILEの不思議な挙動 2007/01/16
[Oracle] UTL_FILE.PUT_LINE で書き出される改行コードがおかしい! 2007/01/17
[Oracle] UTL_FILE.GET_LINE で改行コードの一部が読み込まれる! 2007/01/18
[Oracle] UTL_FILE でキャラクタ・セットを変換して読み書きする(1) 2007/02/21
[Oracle] UTL_FILE でキャラクタ・セットを変換して読み書きする(2) 2007/02/27