首页 文章

无法写入文件 . 神谕

提问于
浏览
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:您不得向自己授予/撤销特权

我究竟做错了什么?

2 回答

  • 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.open used to be the directory path的第一个参数,但自从引入 DIRECTORY 对象(在9i?中)以来,这已被弃用 .

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

相关问题