プロが教えるわが家の防犯対策術!

UTL_FILEパッケージを使用してPL/SQLよりテキスト出力したいのですが上手くいきません。
まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。
次に以下のようにプロシージャを作成しました。
create procedure kan_exp(
fir IN varchar2, filename IN varchar2) is
file UTL_FILE.FILE_TYPE;
CURSOR tk01_kan_c IS
select aaa,bbb
from tableCCC
begin
file := UTL_FILE.FOPEN(dir, filename, 'w');
UTL_FILE.PUT_LINE(file, 'TEST');
UTL_FILE.NEW_LINE(file);
for kanrec in tk01_kan_c loop
UTL_FILE.PUT_LINE(file, 'TEST');
end loop;
END kan_exp;
/
それを以下のように呼び出しましたが、
execute kan_exp('UTL_FILE_DIR', 'aaa.csv');
「ORA-29280:無効なディレクトリパスです。」エラーが発生します。
色々と調べてユーザに権限が必要かと思い、「grant read on directory to User」としましたが、ユーザーまたはロール'User'は存在しませんと出てきます。※もちろんUserは存在します。
なにか足りないものがあるのでしょうか?
ご教示いただけますでしょうか?宜しくお願いします。

A 回答 (2件)

本当にそういうコードなのか、転記ミスなのか良くわからないので


勝手に判断することを許してください。

>まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。

「sysdbaで」を「sysユーザで」と解釈します。
sysでディレクトリオブジェクトを作って、他のユーザが
そのディレクトリオブジェクトを使ってファイルに書き出す場合、
そのユーザに対しwrite権限が必要になります。

>create procedure kan_exp(
>fir IN varchar2, filename IN varchar2) is
kan_expの第一パラメータ名は「dir」?だとすると
>execute kan_exp('UTL_FILE_DIR', 'aaa.csv');
この第一パラメータの値は'aaa'だと思います。

>「grant read on directory to User」としましたが
オブジェクト名が抜けているようですよ。
grant write on directory aaa to User;
のようになります。
    • good
    • 0
この回答へのお礼

大変申し訳ないです。
転記ミスもありました。
その後パブリックにreadとwrite権限追加できましたが、systemではall_directoriesに入っていることを確認しましたがuserには何も入ってきておりません。それが問題だと思うのですが如何でしょうか?

お礼日時:2008/12/09 12:05

> systemではall_directoriesに入っていることを確認しましたが


> userには何も入ってきておりません。
> それが問題だと思うのですが如何でしょうか?

ディレクトリオブジェクトは、たとえユーザでCREATE DIRECTORYを
実行したとしてもユーザの所有物にはならないようです。
#私の環境だとSYSの所有物になりました。
    • good
    • 0
この回答へのお礼

そのようですね。
ファイルへのアクセス権限が無いような感じです。

また何か情報ありましたらご提供お願いします。

お礼日時:2008/12/10 01:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す