[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);