ORA-29283:无效的文件操作ORA-06512:在“ SYS.UTL_FILE”的第536行处

| 下面是我用来将数据从表提取到平面文件的代码。
BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := \'table.txt\';
    file_handle := utl_file.fopen(\'SEND\',file_name,\'W\');
FOR rec in(
    SELECT            column 1
                ||\'~\'||column 2
                ||\'~\'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;
这段代码在我们的开发数据库中运行良好,但是如果我在新的数据库中执行,则会抛出以下错误。
Error starting at line 1 in command:
    BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := \'table.txt\';
    file_handle := utl_file.fopen(\'SEND\',file_name,\'W\');
FOR rec in(
    SELECT            column 1
                ||\'~\'||column 2
                ||\'~\'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Error report:
ORA-29283: invalid file operation
ORA-06512: at \"SYS.UTL_FILE\", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7
29283. 00000 -  \"invalid file operation\"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.
Oracle directory \'SEND\' points to some UNIX directory which has rights as 
       \'rwxrwsr-x\' (Octal 2775)
Oracle Version:11g
请帮我解决这个问题。 各位,如果您需要我提供更多数据来解决此问题,请告诉我。     
已邀请:
因此,@ Vivek通过注释中的对话而不是实际答案来解决了问题。谁说SO是问答网站而不是论坛?嗯,我等等。 无论如何,在这个问题没有一个公认的答案的情况下,我提供了一个与我有关on3ѭ的答案的链接。在这里找到。 附言我将这个答案标记为Community Wiki,因为它不是该问题的正确答案,只是重定向到其他地方。     
在Windows上,还要检查文件是否未使用EFS加密。在手动解密文件之前,我遇到了同样的问题。     
我已经面对这个问题两天了,发现您在Oracle中创建的目录也需要首先在物理磁盘上创建。 在尝试查找解决方案的任何地方,我都没有发现这一点。 例 如果创建目录,则假设\'\4ѭ\'。
CREATE OR REPLACE DIRECTORY DB_DIR AS \'E:\\DB_WORKS\';
然后,您需要确保
E:\\
驱动器中存在
DB_WORKS
,并且Oracle进程还可以使用文件系统级别的读/写权限。 下面是我根据这种经验对UTL​​_FILE的理解。   UTL_FILE是SYS用户下的对象。在SYS.UTL_FILE上授予执行权限   上市;需要以SYS身份登录时给出。否则,它将   在程序中给出声明错误。任何人都可以创建目录   显示:-创建或替换目录DB_DIR AS \'E:\\ DBWORKS \';但是创建   目录权限应已到位。这可以被授予   显示:-授予用户全部创建目录;以SYS身份登录   用户。但是,如果需要其他用户使用,则需要授予   给该用户,否则将引发错误。授权阅读   向用户写入,在DB_DIR上执行;以用户身份登录   创建目录。然后,编译您的软件包。执行之前   该过程中,请确保目录实际存在于您的   磁盘。否则会抛出“无效的文件操作”错误。 (V.   重要)确保具有文件系统级别的读/写权限   Oracle进程的位置。这与数据库级别分开   授予权限。(V.重要)执行过程。文件应该得到   用查询的结果集填充。     
假设文件已在预定义目录中创建,名称为\“ \8ѭ\” 1)更改文件的所有权:
sudo chown username:username table.txt
2)更改文件模式
sudo chmod 777 table.txt
现在,尝试它应该起作用!     

要回复问题请先登录注册