我有以下权限:创建任何目录、读取、写入目录 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 行
我无法访问Windows上的oracle,但在你的init.ora文件中有类似的内容
UTL_FILE_DIR=c:\DOCS
然后您需要重新启动oracle
您还应该能够执行以下操作(但我还没有测试过)
alter system set utl_file_dir=c:\DOCS scope=both
如果出现此错误消息,您应该检查的事项
DOCS
指向正确的物理操作系统目录DOCS
。这可以通过以下方式完成:GRANT READ,WRITE ON DIRECTORY DOCS TO user_or_role_name;
*
或 >
字符。如果您的程序根据数据动态生成文件名(这很可能,除非您希望每个文件都被命名为test.txt
)并且该数据包含无效字符,那么您可能会花一段时间试图找到问题!!确保您的代码包含某种 Safe_File_Name(filename_)
函数!!