最初の問題は、おそらくパスが存在しないか、ディレクトリに対する書き込み権限がないことです。
SQL> select directory_path from all_directories where directory_name = 'YOUR DIRECTORY' ;
行がない場合は、ディレクトリが存在しないか、ディレクトリに対する特権がないため、DBAでこれに対処する必要があります。データベースディレクトリは、次の2つの要素の組み合わせです。
- データベースディレクトリは、オペレーティングシステム内の場所へのポインタまたは参照です。
- そのディレクトリのパスが存在し、プロセスを実行するユーザーがそのディレクトリに対する読み取りおよび書き込み権限を持っている必要があります。
2番目の問題の問題は、プロシージャを所有するユーザーにシステム権限CREATEANYDIRECTORYが付与されていないことです。 DBAは、ユーザーに対してCREATE ANY DIRECTORY特権を付与する必要がありますが、お勧めしません。特権を付与することは悪いセキュリティ慣行です。
ディレクトリの作成は通常、DBAのタスクです。オペレーティングシステムに応じて、ファイルシステム(Linux)またはWindowsドライブに基になるディレクトリも作成する必要がある限り、動的に作成する必要があるシナリオは予測できません。
特別な状況を考えると、これを選択することはできません。ソリューションを再評価する必要があります。おそらく、WRITETOFILEの代わりにWRITETOCLOBを使用し、代わりにsqlplusによってクライアント側で結果をスプールする場合があります