Masataka Miki's Blog

すみません、わかりません。もっと勉強して改善します。

[Oracle]UTL_FILE_DIR初期化パラメータが非推奨になってた

   

Oracle 11gからデータベースのアップグレードを行った際、ファイル出力のために、初期化パラメータのUTL_FILE_DIRに複数個のディレクトパスを設定しようとしたところ、「ORA-00922: オプション指定されていないか、または無効です。」とエラーが発生した。

初期化パラメータを確認してみると、UTL_FILE_DIRがない。もう少し調べてみると、12c以降では非推奨となっており、代わりにディレクトリ・オブジェクトの使用が推奨されるようになっていた。

1)まずは、ディレクトリ・オブジェクトを作成する

Oracle Database 12cリリース2 (12.2)での初期化パラメータの変更
CREATE OR REPLACE DIRECTORY DIRECTORY_NAME AS 'C:\XXX\YYY\ZZZ\';

2)ユーザーにディレクトリのアクセス権限を付与

GRANT READ, WRITE ON DIRECTORY DIRECTORY_NAME TO USER_NAME;

3)ユーザーにUTL_FILEの権限を付与

GRANT EXECUTE ON UTL_FILE TO USER_NAME;

4)UTL_FILEのパラメータに、実際のファイルパスではなく、作成したディレクトリ名を使用すればよい

OUT_DIR VARCHAR2(16) := 'DIRECTORY_NAME';
IN_HANDLE UTL_FILE.FILE_TYPE;

IN_HANDLE := UTL_FILE.FOPEN(OUT_DIR, 'TEST.TXT', 'A', 32767);

 - 技術