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;

以前我已经成功执行了这些语句:

create directory sample as 'C:\samples';

(虽然我在驱动器上找不到目录C:\?)但这给了我这样的输出:

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

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

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

我还尝试向我的用户名授予特权:

grant read, write on directory sample to brick;

但这给了我一个像

ORA-01749: 您不能授予/撤销您自己的权限

我究竟做错了什么?

4

2 回答 2

1

代替

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

和 :

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

文档中所示,第一个参数是目录对象名称


在旧版本的 Oracle 中,第一个参数UTL_FILE.open 曾经是目录路径DIRECTORY,但自从引入对象后(在 9i 中?),这已被弃用。

于 2013-02-13T14:15:19.087 回答
0

非常感谢你!我发现了我的错误。我正在创建目录

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');

于 2015-05-13T07:43:23.480 回答