0

utl_file を使用してファイルを読み取る際に問題に直面しています。同じコードが一部のインスタンスで正常に機能し、1 つのインスタンスで失敗しています。

以下が問題です。

コード:

procedure del_mul_tags(p_request_id   in number)
is

fileID UTL_FILE.FILE_TYPE;
fileID1 UTL_FILE.FILE_TYPE;
line varchar2(32000);
l_dir varchar2(1000);
l_file varchar2(20);
l_file1 varchar2(20);
l_request_id number;
l_count number := 0;
l_count_t number :=0;
l_write boolean := TRUE;

cursor c_dir is
select substr(OUTFILE_NAME,1,instr(OUTFILE_NAME,'/',-1,1)-1),substr(OUTFILE_NAME,instr(OUTFILE_NAME,'/',-1,1)+1)
from fnd_concurrent_requests
where request_id = p_request_id;

begin

open c_dir;
fetch c_dir into l_dir,l_file;
close c_dir;

execute immediate 'create or replace directory W2_OUT_DIR as ''' || l_dir || '''';

begin

      fileID1 := UTL_FILE.FOPEN ('W2_OUT_DIR', l_file, 'R'); -----Getting the error right here!!!-----------
      loop
      begin
       UTL_FILE.GET_LINE (fileID1, line);

       --Some Logic

       EXCEPTION WHEN NO_DATA_FOUND THEN
       UTL_FILE.FCLOSE(fileID1);
       EXIT;
       end;
       end loop;

       fileID := UTL_FILE.FOPEN ('W2_OUT_DIR', l_file, 'R');

         loop
         begin
           UTL_FILE.GET_LINE (fileID, line);

          --Some Logic

           EXCEPTION WHEN NO_DATA_FOUND THEN
           UTL_FILE.FCLOSE(fileID);
           EXIT;
           end;
         end loop;

         end;

EXCEPTION WHEN OTHERS   THEN
fnd_file.put_line(fnd_file.log,'Error while deleting the xml tags: '||SQLERRM);
end;

...............

このインスタンス ファイルでは、l_file 'ACHAKR01.23067873' が別の同時プロセスによって作成されました。その OS ユーザーは「appsofde」です。また、UNIX のアクセス許可は次のとおりです。

-rw-r--r-- 1 appsofde dba 192092429 1 月 27 日 05:00 ACHAKR01.23067873

ディレクトリ W2_OUT_DIR が作成され、oracle ユーザー アプリに EXECUTE、READ、WRITE 権限が付与されます。

ファイルが存在し、W2_OUT_DIR dir パッチが正しい。

正確なエラーは次のとおりです。

Error while deleting the xml tags: ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 536 
ORA-29283: invalid file operation

ここで何か考えはありますか?

4

1 に答える 1

0

ファイルシステムが Oracle DB ホスト (アプリケーションサーバーだけでなく) に提示されていることを確認する必要があります。そうしないと、代わりに無効なディレクトリパスエラーが発生すると思います。ただし、再確認し、DB ホストの oracle アカウントが問題のファイルを読み取るためのアクセス権を持っていることを確認することをお勧めします。アカウント appsofde は、アプリケーション アカウントである可能性が高いように聞こえます。

于 2015-02-13T19:29:53.710 に答える