0

みなさんこんにちは。PL/SQL および Oracle データベースは初めてです。サーバー上に存在するファイルを読み書きする必要があるため、使用してutl_file.fopen('/home/tmp/','text.txt','R')いますが、Oracle で「無効なディレクトリ パス」というエラーが表示されます。

主な問題は、私はユーザー権限しか持っていないため、次の コードを使用してcreate directory user_dir as '/home/temp/'utl_file_dir を表示するだけで、utl_file_dir のようなコマンドを使用したり表示したりできないことです。show parameter utl_file_dir;

SQL> set serveroutput on;
SQL> Declare
  2      Intval number;
  3      Strval varchar2 (500);
  4      Begin
  5       If (dbms_utility.get_parameter_value('utl_file_dir', intval,strval)=0)
  6      Then dbms_output.put_line('value ='||intval);
  7      Else dbms_output.put_line('value = '||strval);
  8      End if;
  9      End;
 10  /

出力は「値= 0」でした。

私はグーグルで検索しましたが、この問題の解決策が見つからなかったので、ここで助けを求めています.

ファイルを読み取るには、次のコードを使用しました:

    declare
    f utl_file.file_type;
    s varchar2(200);
begin
    f := utl_file.fopen('/home/tmp/','text.txt','R');
    loop
        utl_file.get_line(f,s);
        dbms_output.put_line(s);
    end loop;
exception
    when NO_DATA_FOUND then
        utl_file.fclose(f);
end;
4

1 に答える 1

2

ディレクトリ オブジェクトを作成する権限がない場合 (ディレクトリ オブジェクトがまだ存在しない場合)、DBA (または適切な権限を持つ他のユーザー) に要求を送信して、ディレクトリ オブジェクトを作成する必要があります。ディレクトリを作成し、そのディレクトリへのアクセスを許可します。

utl_file_dirOracle 8.1.x を使用している場合や、8.1.x の時代に書き戻されたレガシー プロセスを扱っている場合を除き、ディレクトリ オブジェクトよりもはるかに柔軟性が低く、変更するにはデータベースを再起動する必要がある古いパラメータです。ディレクトリを使用するように更新されていないため、無視する必要があります。

于 2013-10-08T20:26:00.223 に答える