UTL_FILEとはOSのテキストファイルを読み書きするストアドプロシージャ群を含むパッケージで、PL/SQLプログラムから利用できます。この記事では、UTL_FILEパッケージに含まれるプロシージャの使い方をご紹介します。
Oracle DatabaseでUTL_FILEパッケージを使用してファイルの読み取りや書き込みを行うには、あらかじめディレクトリのアクセス権限を設定する必要がある。ディレクトリのアクセス権限を設定する手順は次の通り。
ディレクトリのアクセス権限を設定する例を次に示す。
SQL> CREATE DIRECTORY log_dir AS '/appl/log/';
SQL> GRANT READ ON DIRECTORY log_dir TO tsuka;
| サブプログラム | 説明 |
|---|---|
| FCLOSE | ファイルをクローズする。 |
| FCLOSE_ALL | オープンしているすべてのファイルをクローズする。 |
| FOPEN | ファイルをオープンする。 |
| GET_LINE | ファイルからテキストを1行読み取る。 |
| PUT_LINE | ファイルへテキストを1行書き出す。 |
UTL_FILEパッケージ固有のデータ型として、UTL_FILE.FILE_TYPEがある。
| 例外名 | 説明 |
|---|---|
| INVALID_PATH | ファイルの場所が無効 |
| INVALID_MODE | FOPENのopen_modeパラメータが無効 |
| INVALID_FILEHANDLE | ファイル・ハンドルが無効 |
| INVALID_OPERATION | 要求されたファイル操作ができない |
| READ_ERROR | 読み込み操作中にOSのエラーが発生 |
| WRITE_ERROR | 書き込み操作中にOSのエラーが発生 |
| INTERNAL_ERROR | PL/SQLの内部エラー |
| CHARSETMISMATCH | FOPEN_NCHARを使用してオープンしてnoncharファンクションを使用した |
| FILE_OPEN | ファイルがオープンされているため要求された操作が失敗 |
| INVALID_MAXLINESIZE | FOPENのmax_linesize値が無効 |
| INVALID_FILENAME | ファイル名パラメータが無効 |
| ACCESS_DENIED | ファイルに対するアクセスが拒否された |
| INVALID_OFFSET | オフセットが無効 |
| DELETE_FAILED | ファイルの削除に失敗 |
| RENAME_FAILED | ファイル名の変更に失敗 |
上記の例外の他に、事前定義済みのPL/SQL例外を発生させるときもある。
FOPENは、ファイルをオープするンファンクションである。ファンクションの戻り値として、オープンしたファイルのファイルハンドルを返す。
UTL_FILE.FOPEN (
location IN VARCHAR2,
filename IN VARCHAR2,
open_mode IN VARCHAR2,
max_linesize IN BINARY_INTEGER
) RETURN UTL_FILE.FILE_TYPE
| open_mode | 説明 |
|---|---|
| r | テキストの読み出し |
| w | テキストの書き込み |
| a | テキストの追加 |
| rb | バイトの読み出し |
| wb | バイトの書き込み |
| ab | バイトの追加 |
GET_LINEは、ファイルからテキストを1行読み取るプロシージャである。
UTL_FILE.GET_LINE (
file IN UTL_FILE.FILE_TYPE,
buffer OUT VARCHAR2,
len IN PLS_INTEGER DEFAULT NULL
)
PUT_LINEは、ファイルへテキストを1行書き出すプロシージャである。
UTL_FILE.PUT_LINE (
file IN UTL_FILE.FILE_TYPE,
buffer IN VARCHAR2,
autoflush IN BOOLEAN DEFAULT FALSE
)
FCLOSEは、ファイルをクローズするプロシージャである。
UTL_FILE.FCLOSE (
file IN OUT UTL_FILE.FILE_TYPE
)
FCLOSE_ALLは、オープンしているすべてのファイルをクローズするプロシージャである。
UTL_FILE.FCLOSE_ALL;