OracleのUTL_FILEパッケージを利用すると、PL/SQLからサーバー上のファイルへ文字を書き込むことができます。しかし、UTL_FILE.FOPENやUTL_FILE.PUT_LINEなどのプロシージャは、SQL画面で単独の命令として実行できるのか、また保存せずに動作確認できるのか疑問に感じることがあります。
この記事では、UTL_FILEの各プロシージャの役割や、実際にファイル出力を確認するためのテスト方法、実行時に必要となる設定について解説します。
UTL_FILE.FOPENやPUT_LINEは単独コマンドとして実行できるのか
UTL_FILE.FOPENやUTL_FILE.PUT_LINEは、通常のSQL文のように単独で実行するコマンドではありません。これらはPL/SQLパッケージ内のプロシージャやファンクションとして提供されているため、PL/SQLブロックやストアドプログラム内から呼び出して使用します。
例えば、以下のような記述だけをSQL Developerなどで実行しても正常には動作しません。
utl_file.fopen(‘LOG_DIR’,’test.txt’,’w’);
FOPENはファイルハンドルを戻り値として返す関数であり、その戻り値を変数に保持してからPUT_LINEなどで利用する必要があります。
UTL_FILEを動作確認する基本的なテスト方法
UTL_FILEの動作確認をする場合は、匿名PL/SQLブロックを作成して実行する方法が一般的です。
例えば以下のような簡単なテストコードを使用できます。
DECLARE
out_handle UTL_FILE.FILE_TYPE;
BEGIN
out_handle := UTL_FILE.FOPEN(‘LOG_DIR’,’test.txt’,’W’);
UTL_FILE.PUT_LINE(out_handle,’UTL_FILEのテストです’);
UTL_FILE.FCLOSE(out_handle);
END;
/
この処理では、ファイルを開く、文字を書き込む、ファイルを閉じるというUTL_FILEの基本的な流れを確認できます。
UTL_FILEを使用する前に必要な設定
UTL_FILEは、どの場所へでも自由にファイルを書き込めるわけではありません。Oracleではセキュリティ上の理由から、書き込み可能なディレクトリをあらかじめ登録する必要があります。
一般的にはCREATE DIRECTORYで論理ディレクトリを作成します。
例。
CREATE DIRECTORY LOG_DIR AS ‘/oracle/log’;
その後、利用するユーザーへ権限を付与します。
例。
GRANT READ, WRITE ON DIRECTORY LOG_DIR TO ユーザー名;
この設定がない場合、UTL_FILE.FOPEN実行時にORA-29280やORA-29289などのエラーが発生することがあります。
保存せずに動作確認することはできるのか
UTL_FILEはファイルへ書き込むための機能なので、実際のファイル作成を行わずに完全な動作確認をすることはできません。
ただし、本番データへ影響を与えず確認したい場合は、テスト用ディレクトリを指定したり、テスト用ファイル名を利用する方法があります。
例えば、LOG_DIRをテスト専用のディレクトリに設定し、test_check.txtのような確認用ファイルへ出力することで安全に動作確認できます。
よくあるUTL_FILEのエラーと確認ポイント
UTL_FILEのテストでは、ファイル操作に関するエラーが発生することがあります。主な確認ポイントは以下の通りです。
- DIRECTORYオブジェクトが正しく作成されているか
- 対象ユーザーにWRITE権限があるか
- Oracleサーバー側のパスが存在するか
- FOPENのモード指定が正しいか
- ファイルクローズ処理を実行しているか
例えば、Windowsのローカルフォルダを指定したつもりでも、UTL_FILEが実行される場所はOracle Databaseサーバー側です。クライアントPC側にファイルが作成されるわけではありません。
UTL_FILEのテストではFOPENからFCLOSEまで確認する
UTL_FILEを確認するときは、FOPENだけ、PUT_LINEだけというように個別の処理を見るよりも、一連のファイル操作として確認することが重要です。
基本的な流れは以下になります。
- FOPENでファイルを開く
- PUT_LINEで文字を書き込む
- 必要な処理を実行する
- FCLOSEでファイルを閉じる
この流れをPL/SQLブロック内で実行することで、実際のシステムで利用する前に問題を確認できます。
まとめ:UTL_FILEは単独実行ではなくPL/SQLでテストする
OracleのUTL_FILE.FOPENやUTL_FILE.PUT_LINEは、SQL文のように単独で実行するものではなく、PL/SQLブロック内で利用するプロシージャです。
動作確認を行う場合は、FOPENでファイルを開き、PUT_LINEで書き込み、FCLOSEで閉じる一連の処理を匿名PL/SQLとして実行する方法が適しています。
保存せずに確認することはできませんが、テスト用ディレクトリやテストファイルを利用すれば、本番環境へ影響を与えず安全にUTL_FILEの動作確認を行うことができます。


コメント