spica350の開発メモ

知識集約(メモ)代わりに使用中。

【Oracle】UTL_FILEパッケージとLOB型

PL/SQLにおいてはUTL_FILEパッケージによってファイルの入出力を行うことができる。

UTL_FILEパッケージで一回の入出力の長さは最大32KBである。

 

問題:

テキストファイル全体で4KB以上のデータをUTL_FILEパッケージで読み込む場合、LOB型で確保することはできない。

 

原因:

GET_LINEプロシージャはVARCHAR2型でバッファに読み込む。その後LOB型に追記するとVARCHAR2型に暗黙的に変換されてしまうから(?)。

※ちなみにLOB型は実データを表領域にではなく別の格納領域に確保している。

表領域にはロケータと呼ばれる格納先のポインタを含めた構造体を配置することでデータを保持している。

 

解決策:

1.パッケージを拡張する。(ex.XT_UTL_FILE)

2.受け取る型をLONG型にする。(その後LOB型に変換できる?)