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;