2013-02-13 105 views
0

我试图执行这些行:无法写入文件。甲骨文

DECLARE 
    V_FILEHANDLE UTL_FILE.FILE_TYPE; 
BEGIN 
    V_FILEHANDLE := UTL_FILE.FOPEN('C:\samples', '1.csv', 'w'); 
    UTL_FILE.PUT_LINE(V_FILEHANDLE, 'sample string'); 
    UTL_FILE.FCLOSE_ALL; 
END; 

此前我已经成功地执行这些语句:(?虽然我不能找到C:\驱动器上的目录)

create directory sample as 'C:\samples'; 

但是这给了我等的输出:

ORA-29280: “无效的目录路径”

* 原因:相应的目录对象不存在。

* 动作:更正目录对象参数,或使用CREATE DIRECTORY命令创建相应的目录对象。

而且我已经试过授予previleges到我的用户名:

grant read, write on directory sample to brick; 

但是这给了我像

ORA-01749的输出:你可能不赋予/撤消的特权/ from your

我在做什么错?

回答

1

替换

V_FILEHANDLE := UTL_FILE.FOPEN('C:\samples', '1.csv', 'w'); 

与:

V_FILEHANDLE := UTL_FILE.FOPEN('SAMPLE', '1.csv', 'w'); 

作为indicated in the doc,将第一个参数是目录对象


在旧版本的Oracle的UTL_FILE.openused to be the directory path的第一个参数,但由于引入了DIRECTORY对象的这个已被否决(9i中?)。

+0

完成。现在越来越ORA-29283错误。我应该授予谁权限? – lexeme 2013-02-13 14:18:41

+0

@brick服务器上的物理目录是否存在?在Oracle中使用它之前,必须先从操作系统创建目录。 – 2013-02-13 14:21:50

+0

我不知道这个,因为你可能猜到) – lexeme 2013-02-13 14:22:01

0

谢谢SOOO很多!我发现我的错误。我创建像

create or REPLACE DIRECTORY dat_dir as '/u01/oracle/Desktop/Migration/Data';

然后我用它在我的UTL_FILE这样

file1 := utl_file.fopen('dat_dir','output.txt','w');

我一直想这个为工作目录现在3天。我发现这个问题,因为它在引号内,它是一个区分大小写的字符串。如果最初我使用了dat_dir,则无关紧要,oracle会以大写形式存储这样的内容。你简单的回答帮助我意识到这一点,谢谢你一百万次!

做正确的做法是:

file1 := utl_file.fopen('DAT_DIR','output.txt','w');