ORA-29280: 無効なディレクトリ・パスです。
Oracleでディレクトリオブジェクトを作成し、
create directory batch_log_dir as '/opt/app/batch/log';
grant read on directory batch_log_dir to hoge_user;
grant write on directory batch_log_dir to hoge_user;
PL/SQLからファイルを出力してみる。
SQL> declare
2 lfp_log UTL_FILE.FILE_TYPE;
3 v_file_name VARCHAR2(250);
4 begin
5 v_file_name := 'test.log';
6 lfp_log := UTL_FILE.FOPEN('batch_log_dir', v_file_name, 'a');
7 UTL_FILE.PUT_LINE(lfp_log, 'hogehoge');
8 UTL_FILE.FCLOSE(lfp_log);
9 end;
10 /
declare
*
行1でエラーが発生しました。:
ORA-29280: 無効なディレクトリ・パスです。
ORA-06512: "SYS.UTL_FILE", 行41
ORA-06512: "SYS.UTL_FILE", 行478
ORA-06512: 行6
ぬう、なぜだ。と思ったが、ディレクトリオブジェクト名が小文字だったのが問題。
ディレクトリオブジェクト名を大文字にしたら動いた。
[amazon_enhanced asin=”4797359242″ /]
declare
lfp_log UTL_FILE.FILE_TYPE;
v_file_name VARCHAR2(250);
begin
v_file_name := 'test.log';
lfp_log := UTL_FILE.FOPEN('BATCH_LOG_DIR', v_file_name, 'a'); --ディレクトリオブジェクト名は大文字
UTL_FILE.PUT_LINE(lfp_log, 'hogehoge');
UTL_FILE.FCLOSE(lfp_log);
end;
/