【问题标题】:UTL_FILE: Could not create a new fileUTL_FILE:无法创建新文件
【发布时间】:2017-10-24 12:36:28
【问题描述】:

我在 ly 代码中使用此语句来创建/打开一个文件:如果尚不存在则创建它/如果已存在则打开它。

   w_file_handle := utl_file.fopen ('SAUV_DIR',
                                'sauv_tab_tbrcs_params.txt' ,
                                'W') ;

该文件尚不存在,但无法创建。

我收到了这个错误:

SQL> @MyScript.sql
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 14

如果文件不存在,有什么想法可以创建文件吗?

【问题讨论】:

    标签: oracle plsql sqlplus


    【解决方案1】:

    您可以参考此代码在您的目录中创建一个文件。

    我用下面的代码创建了一个 tt.sql 文件。我检查了我有一个工作目录“BDUMP”。

    目录检查:

    SQL> SELECT DIRECTORY_NAME , DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'BDUMP';
    
    DIRECTORY_NAME                 DIRECTORY_PATH
    ------------------------------ ---------------
    BDUMP                          /home/fil_test/
    

    更改目录权限。默认情况下,它只对其他人具有读取和执行权限。

    terminal$ chmod 777 fil_test
    

    块:

    DECLARE
       fHandle   UTL_FILE.FILE_TYPE;
    BEGIN
       fHandle := UTL_FILE.FOPEN ('BDUMP', 'test_file', 'w');
    
       UTL_FILE.PUT (fHandle, 'This is the first line');
       UTL_FILE.PUT (fHandle, 'This is the second line');
       UTL_FILE.PUT_LINE (fHandle, 'This is the third line');
    
       UTL_FILE.FCLOSE (fHandle);
    EXCEPTION
       WHEN OTHERS
       THEN
          DBMS_OUTPUT.PUT_LINE (
             'Exception: SQLCODE=' || SQLCODE || '  SQLERRM=' || SQLERRM);
          RAISE;
    END;
    /
    

    执行:

    SQL> @tt.sql
    
    PL/SQL procedure successfully completed.
    

    我看到创建的文件:

    terminal$ ls -lrt test_file*
    -rw-r-----   1 oracle   dba           68 Oct 24 14:49 test_file
    

    【讨论】:

    • 我由begin Read_Writ_file(); end;执行 我有同样的错误:29283. 00000 - “无效的文件操作” *原因:试图从不存在的文件或目录中读取,或文件或目录访问被操作系统拒绝。 *Action:验证文件系统上的文件和目录访问权限,如果读取,验证文件是否存在。
    • ...但是当我在目录中手动创建文件时它成功执行。我希望它是由语句创建的。
    • @O.Sam 这意味着该目录在您的情况下不存在。检查目录是否存在。阅读更新后的帖子。还授予您目录的权限777
    • 感谢@XING,目录存在。我没有给予许可。脚本执行成功(:y)
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多