无法写入文件。甲骨文
问题描述:
我试图执行这些行:无法写入文件。甲骨文
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
我在做什么错?
答
替换
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.open
used to be the directory path的第一个参数,但由于引入了DIRECTORY
对象的这个已被否决(9i中?)。
答
谢谢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');
完成。现在越来越ORA-29283错误。我应该授予谁权限? – lexeme 2013-02-13 14:18:41
@brick服务器上的物理目录是否存在?在Oracle中使用它之前,必须先从操作系统创建目录。 – 2013-02-13 14:21:50
我不知道这个,因为你可能猜到) – lexeme 2013-02-13 14:22:01