大家好。
我是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;
答案 0 :(得分:2)
如果您没有权限创建目录对象(并假设目录对象尚不存在),则需要向DBA(或具有相应权限的其他人)发送请求为您创建目录并授予您访问该目录的权限。
utl_file_dir
是一个过时的参数,它不如目录对象灵活,并且需要重新启动数据库才能更改 - 除非您使用的是Oracle 8.1.x,或者您正在处理的是遗留流程在8.1.x天内写回来并且还没有更新为使用目录,你应该忽略它。