utl_file.fopen没有'创建目录......如...'

时间:2013-10-08 19:44:31

标签: database oracle file-io plsql utl-file

大家好。 我是PL / SQL和Oracle数据库的新手。 我需要读取/写入服务器上存在的文件,因此我使用utl_file.fopen('/home/tmp/','text.txt','R')但Oracle显示错误“无效的目录路径”。

主要问题是我只有用户权限,因此我无法使用create directory user_dir as '/home/temp/'之类的命令或仅使用show parameter utl_file_dir;查看utl_file_dir 我用这段代码来查看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  /

,输出为'value = 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;

1 个答案:

答案 0 :(得分:2)

如果您没有权限创建目录对象(并假设目录对象尚不存在),则需要向DBA(或具有相应权限的其他人)发送请求为您创建目录并授予您访问该目录的权限。

utl_file_dir是一个过时的参数,它不如目录对象灵活,并且需要重新启动数据库才能更改 - 除非您使用的是Oracle 8.1.x,或者您正在处理的是遗留流程在8.1.x天内写回来并且还没有更新为使用目录,你应该忽略它。