ストアドプロシージャ内でファイルを読み込みたいなっと思って調べてみたら UTL_FILE というライブラリがあることが判明しました。
今回は UTL_FILE について紹介したいと思います。
UTL_FILEについて
UTL_FILE の GET_LINE() を使うと、ファイルから 1 行ずつデータを読み込んでプログラム上で扱うことができます。
ただ UTL_FILE.GET_LINE() は、読み込む行がなくなると NULL や論理値を返してくれるわけではなく Exception が発生します。
WHILE や LOOP などの比較演算子に使いたかったところですが、仕方なく EXCEPTION のブロックで NO_DATA_FOUND を受けます。
ストアドはループで continue が使えないのもちょっと面倒なところですね。
GOTO 使うしかないのかな・・・。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [ファイルの読み込み] 外側のブロック(BEGINなどは省略してます) (変数) buff VARCHAR2(1000); fileHandle UTL_FILE.FILE_TYPE; (処理) # 3番目のrは入力(w:出力 a:追加出力) fileHandle = UTL_FILE.FOPEN('ファイルパス', 'ファイル名', 'r'); <<LOOP_FILE>> LOOP BEGIN UTL_FILE.GET_LINE(fileHandle, buff); EXCEPTION WHEN NO_DATA_FOUND THEN EXIT LOOP_FILE; END; (読み込み後の処理) END LOOP; |