我在sys用户下创建了如下目录:create or replace directory FILEPATH as 'D:\';
并且执行
declare
  w_OutputFile      UTL_FILE.FILE_TYPE;
begin   w_OutputFile := utl_file.FOPEN('FILEPATH','12.txt','W');
   UTL_FILE.PUT_LINE(w_OutputFile, 'abcdef');
   UTL_FILE.FCLOSE(w_OutputFile);end;
为什么总是出现
   ORA-06510;PL/SQL:用户定义例外发生,处理不能执行。
和 ORA-06512:"SYS.UTL_FILE"
错误呢?
我是在SYS用户下执行的,不会有权限的问题。百思不得其解!!??

解决方案 »

  1.   

    设置UTL_FILE_DIR参数等于文件的路径
      

  2.   

    我以前试了也没问题,不知道现在为什么不行了???
    至于UTL_FILE_DIR参数是可以不用设置的。
      

  3.   

    create or replace procedure p_operafile is
      file_handle utl_file.file_type;
        v_line varchar2(3000);
    begin
      file_handle:=UTL_FILE.fopen('e:\orafile','misc_cust_all.txt','r');
      loop
        begin  
          UTL_FILE.get_line(file_handle,v_line);
          Dbms_Output.put_line(line);      exception    
            when no_data_found then
              Dbms_Output.put_line('no_data_found');
              exit;
          end; 
      end loop;    
      Utl_File.fclose(file_handle);
    exception  
        WHEN OTHERS THEN BEGIN
           Dbms_Output.put_line('error');
              
        end;
    end p_operafile;
      

  4.   

    Dbms_Output.put_line(line);
    改为 Dbms_Output.put_line(v_line);
      

  5.   

    应该是你的程序发生了异常,但是你程序中却没有处理。你加一个exception捕捉一下看看。
      

  6.   

    加了一下异常处理:
        EXCEPTION
          WHEN OTHERS THEN
               dbms_output.put_line(sqlcode || '---' || sqlerrm );
    输出:1---User-Defined Exception
    有什么用呢?还是不能写文件呀!?
      

  7.   

    先修改或添加init.ora的UTL_FILE_DIR参数
    例如:
    utl_file_dir=G:\oracle\temp    //保存文本的路径为G:\oracle\temp
      

  8.   

    使用create directory建立的目录,是不需要修改utl_file_dir参数的。
    与之无关。
      

  9.   

    要不你在pl/sql develop里面单步跟踪一下,看看具体的exception
    utl_file_dir在9i中已经不推荐使用,楼上各位不要在提到utl_file_dir的问题
      

  10.   

    参考官方文档:
    http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file.htm#998262
      

  11.   

    UTL_FILE包只能在服务器使用。
      

  12.   

    应当是 'FILEPATH' 所指路经不存在造成的,我拷贝了你的代码,
    将'FILEPATH'改写为 'd:\' 或 'c:\',都没有问题,在服务器的
    d:盘或c:盘下,会有 '12.txt' 文件出现。你再试一下
      

  13.   

    我也试过了,没有问题,查看一些你的服务器上文件路径是否正确(unix和win2000的文件分隔符不同;win2000的路径在oracle中区分大小写,如c:\temp和c:\Temp是不同的)。关注你最终的解决方法!祝顺利!
      

  14.   

    我也遇到同样的问题:
    begin 
        select type into v_company_type
        from  foretak f
        where f.org_nummer = p_orgnr;
      exception
        when NO_DATA_FOUND then
    p_block_txt := 'wrong org nr!';
    p_score := -90;
    UTL_FILE.put_line(v_fileHandle, 'result: failure!'); --这句是对的
    UTL_FILE.put_line(v_fileHandle, p_block_txt ); --这句却不对,也报与楼主同样的错
      end;
    想不出错在哪里
      

  15.   

    找到出错的地方啦,
    我把p_block_txt 的类型从char改为varchar2就可以了