Oracle UTL_FILEパッケージとは

UTL_FILEとはOSのテキストファイルを読み書きするストアドプロシージャ群を含むパッケージで、PL/SQLプログラムから利用できます。この記事では、UTL_FILEパッケージに含まれるプロシージャの使い方をご紹介します。

権限

Oracle DatabaseでUTL_FILEパッケージを使用してファイルの読み取りや書き込みを行うには、あらかじめディレクトリのアクセス権限を設定する必要がある。ディレクトリのアクセス権限を設定する手順は次の通り。

  1. CREATE DIRECTORY 文でディレクトリ・データベース・オブジェクトを作成する。
  2. GRANT 文でディレクトリ・データベース・オブジェクトに関するオブジェクト権限をユーザーに付与する。

ディレクトリのアクセス権限を設定する例を次に示す。

SQL> CREATE DIRECTORY log_dir AS '/appl/log/';
SQL> GRANT READ ON DIRECTORY log_dir TO tsuka;

UTL_FILEパッケージのプロシージャ及びファンクション

UTL_FILEパッケージのプロシージャ及びファンクション一覧
サブプログラム 説明
FCLOSE ファイルをクローズする。
FCLOSE_ALL オープンしているすべてのファイルをクローズする。
FOPEN ファイルをオープンする。
GET_LINE ファイルからテキストを1行読み取る。
PUT_LINE ファイルへテキストを1行書き出す。

UTL_FILEパッケージのデータ型

UTL_FILEパッケージ固有のデータ型として、UTL_FILE.FILE_TYPEがある。

UTL_FILEパッケージの例外

UTL_FILEパッケージの例外
例外名 説明
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

FOPENは、ファイルをオープするンファンクションである。ファンクションの戻り値として、オープンしたファイルのファイルハンドルを返す。

UTL_FILE.FOPEN (
  location     IN VARCHAR2,
  filename     IN VARCHAR2,
  open_mode    IN VARCHAR2,
  max_linesize IN BINARY_INTEGER
) RETURN UTL_FILE.FILE_TYPE
location
ディレクトリのパス名
filename
ファイル名(ディレクトリのパス名を除く)
open_mode
ファイルのオープン方法
open_mode 説明
r テキストの読み出し
w テキストの書き込み
a テキストの追加
rb バイトの読み出し
wb バイトの書き込み
ab バイトの追加
max_linesize
ファイルの1行あたりの文字数(改行文字を含む)

GET_LINE

GET_LINEは、ファイルからテキストを1行読み取るプロシージャである。

UTL_FILE.GET_LINE (
  file   IN  UTL_FILE.FILE_TYPE,
  buffer OUT VARCHAR2,
  len    IN  PLS_INTEGER DEFAULT NULL
)
file
ファイル・ハンドル
buffer
ファイルから読み出した行を格納するバッファ
len
ファイルから読み出すバイト数

PUT_LINE

PUT_LINEは、ファイルへテキストを1行書き出すプロシージャである。

UTL_FILE.PUT_LINE (
  file      IN UTL_FILE.FILE_TYPE,
  buffer    IN VARCHAR2,
  autoflush IN BOOLEAN DEFAULT FALSE
)
file
ファイル・ハンドル
buffer
ファイルに書き込む行
autoflush
書きこんだ後でバッファをフラッシュするか

FCLOSE

FCLOSEは、ファイルをクローズするプロシージャである。

UTL_FILE.FCLOSE (
  file IN OUT UTL_FILE.FILE_TYPE
)
file
ファイル・ハンドル

FCLOSE_ALL

FCLOSE_ALLは、オープンしているすべてのファイルをクローズするプロシージャである。

UTL_FILE.FCLOSE_ALL;