SQL> declare
  2      v_utl_filehandler   UTL_FILE.FILE_TYPE;
  3      v_rawfile           RAW(32767);
  4      v_size              NUMBER;
  5      v_block             NUMBER;
  6      v_boolean           BOOLEAN;
  7      v_file_dir          varchar2(100);
  8      v_file_name         varchar2(100) := '1.txt';
  9  begin
 10     v_file_dir := 'RPT_DIR';
 11     v_utl_filehandler := UTL_FILE.FOPEN(v_file_dir, v_file_name, 'r');
 12     UTL_FILE.fgetattr(v_file_dir, v_file_name, v_boolean, v_size, v_block);
 13     UTL_FILE.get_raw(v_utl_filehandler, v_rawfile, v_size);
 14     UTL_FILE.FCLOSE(v_utl_filehandler);
 15  end;
 16  /
declare
*
ERROR 位于第 1 行:
ORA-29284: 文件读取错误
ORA-06512: 在 "SYS.UTL_FILE", line 119
ORA-06512: 在 "SYS.UTL_FILE", line 1100
ORA-06512: 在 line 13'RPT_DIR'是建的一个directory,
create or replace directory RPT_DIR
  as 'C:\orafile\';该目录下是存在1.txt这个文件的。我不明白的是C:\orafile\1.txt文件是存在的,但oracle还是报
"ORA-29284: 文件读取错误"

解决方案 »

  1.   

    我的可以:
    SQL> edit
    已写入 file afiedt.buf  1  declare
      2          v_utl_filehandler  UTL_FILE.FILE_TYPE;
      3          v_rawfile          RAW(32767);
      4          v_size              NUMBER;
      5          v_block            NUMBER;
      6          v_boolean          BOOLEAN;
      7          v_file_dir          varchar2(100);
      8          v_file_name        varchar2(100) := '1.txt';
      9      begin
     10      v_file_dir := 'RPT_DIR';
     11      v_utl_filehandler := UTL_FILE.FOPEN(v_file_dir, v_file_name, 'r');
     12      UTL_FILE.fgetattr(v_file_dir, v_file_name, v_boolean, v_size, v_block);
     13      UTL_FILE.get_raw(v_utl_filehandler, v_rawfile, v_size);
     14      UTL_FILE.FCLOSE(v_utl_filehandler);
     15      dbms_output.put_line(v_size||' '||v_rawfile||' '||v_block);
     16*   end;
    SQL> /
    14 6F6E6C7920612074657374200A 0PL/SQL 过程已成功完成。
      

  2.   

    试下
    grant read, write on directory RPT_DIR to user; 
      

  3.   

    我用的是oracle10g请问该如何设置?
      

  4.   

    我也遇到这个问题,FOPEN时,再指定一个参数
    f1 := utl_file.fopen(L_Path, P_FileName, 'r',32767);