ORA-29283: 读取文件时文件操作无效

问题描述 投票:0回答:2

我有以下权限:创建任何目录、读取、写入目录 DOCS 到用户名

我在 Windows 上使用 oracle 10g。

我首先将目录创建为

CREATE DIRECTORY DOCS AS 'C:\Documents and Settings\Owner\Desktop\file';

目录创建成功。

现在当我尝试执行以下代码时

DECLARE
 l_file         UTL_FILE.file_type;
 l_location     VARCHAR2(100) := 'DOCS';
 l_filename     VARCHAR2(100) := 'test.pdf';
 l_text         VARCHAR2(32767);
BEGIN
-- Open file.
 l_file := UTL_FILE.fopen(l_location, l_filename, 'r', 32767);
-- Read and output first line.
 UTL_FILE.get_line(l_file, l_text, 32767);
 dbms_output.put_line('First Line: |' || l_text || '|');
-- Close the file.
 UTL_FILE.fclose(l_file);
END;

我收到这些错误

ORA-29283: 无效的文件操作

ORA-06512:位于“SYS.UTL_FILE”,第 475 行

ORA-29283: 无效的文件操作

ORA-06512:在第 8 行

oracle plsql oracle11g
2个回答
0
投票

我无法访问Windows上的oracle,但在你的init.ora文件中有类似的内容

UTL_FILE_DIR=c:\DOCS

然后您需要重新启动oracle

您还应该能够执行以下操作(但我还没有测试过)

alter system set utl_file_dir=c:\DOCS scope=both

0
投票

如果出现此错误消息,您应该检查的事项

  • 确保数据库运行的操作系统上存在物理目录。这也许是显而易见的一点,但如果您处于一个在许多服务器上运行许多数据库的环境中,并且这些数据库经常被复制,那么找出哪个数据库写入哪个目录并不总是那么容易!当然,详细信息也会根据您运行 Oracle 的操作系统而有所不同。
  • 确保运行 Oracle 的操作系统用户(即运行 Oracle 服务的操作系统用户)具有操作系统级别的该目录的读/写权限。同样,这是操作系统配置,因此根据设置,您的 DBA 可能无权访问并需要额外的 IT 帮助!
  • 确保您的目录
    DOCS
    指向正确的物理操作系统目录
  • 确保执行代码的 Oracle 用户有权读取/写入 Oracle 目录
    DOCS
    。这可以通过以下方式完成:
    GRANT READ,WRITE ON DIRECTORY DOCS TO user_or_role_name;
  • 确保您的文件名不包含无效字符。例如,Windows 不接受文件名中包含
    *
    >
    字符。如果您的程序根据数据动态生成文件名(这很可能,除非您希望每个文件都被命名为
    test.txt
    )并且该数据包含无效字符,那么您可能会花一段时间试图找到问题!!确保您的代码包含某种
    Safe_File_Name(filename_)
    函数!!
© www.soinside.com 2019 - 2024. All rights reserved.