基本思路
select记录到数组里面
然后遍历数组写入文本文件楼主并没有把你的需求将清楚楼主是要把select出来的记录写到文本文件里吗?

解决方案 »

  1.   

    思路:
    1 使用数组,把数据写到数组中,然后把数组中的数据写到文件中。
    2 使用fcopy函数,在新文件中写入记录数,然后再把老文件中的内容拷到新文件中。
      

  2.   

    我需要生成的是文本文件。在存储过程的最初是用游标从数据库中提取数据,在存储过程中在对游标中的结果集一一筛选,得到真正需要的数据——这一筛选过程是必需的。=============================================================
    这并不意味着取数据的时候就写文件,你可以用个数组来临时保存这些数据,最后根据得到的记录数来回填数组的第一个元素,然后再将数组的所有元素顺序写入文件中。另一种方法:取数据的时候就写入文件中,然后生成一个新的文件,在新文件中写入记录数,然后使用fcopy函数,把老文件中的内容拷到新文件中。
      

  3.   

    我原本想用系统包utl_file中的fseek函数,但好像无法实现
      

  4.   

    可以吧,函数的使用方法并没有说明fseek不能用于文件的write模式,看看帮助怎么写的。
      

  5.   

    我试了方法2:
    取数据的时候就写入文件中,然后生成一个新的文件,在新文件中写入记录数,然后使用fcopy函数,把老文件中的内容拷到新文件中。
    现做个fcopy函数的功能的总结:
    fcopy函数的功能是将源文件中指定行复制到一个新的文件,对于已存在的新文件会被覆盖,而后生成的文件无法继续在文件尾写入。
      

  6.   

    给你一个两个文件对拷的例子。create or replace procedure pp is
      i number;
      str varchar2(1000);  
      handle utl_file.file_type;
      
      type tarr is varray(1000) of varchar2(1000);
      arr tarr:=tarr();  
    begin  
      i:=1;
      arr.extend; 
      
      handle:=utl_file.fopen('e:\','test.txt','r');  
      loop
        begin
          utl_file.get_line(handle,str);
          exception 
            when no_data_found then  exit;          
        end;  
        
        i:=i+1;
        arr.extend;
        arr(i):=str;    
      end loop;
      utl_file.fclose(handle);      if i=1 then
        arr(1):=0;
      else
        arr(1):=i;  
      end if;
      
      handle:=utl_file.fopen('e:\','new.txt','w'); 
      for i in arr.first..arr.last loop
        utl_file.put_line(handle,arr(i));
      end loop;
      utl_file.fclose(handle);
      
      exception 
        when others then
          dbms_output.put_line(sqlcode);   
          dbms_output.put_line(sqlerrm(sqlcode));   
    end;
      

  7.   

    "写文件头的过程中无法预先计算出记录条数"
    ========================================
    应该可以吧游标的 %rowcount
      

  8.   

    给你一个两个文件对拷的例子。create or replace procedure pp is
      i number;
      str varchar2(1000);  
      handle utl_file.file_type;
      
      type tarr is varray(1000) of varchar2(1000);
      arr tarr:=tarr();  
    begin  
      i:=1;
      arr.extend; 
      
      handle:=utl_file.fopen('e:\','test.txt','r');  
      loop
        begin
          utl_file.get_line(handle,str);
          exception 
            when no_data_found then  exit;          
        end;  
        
        i:=i+1;
        arr.extend;
        arr(i):=str;    
      end loop;
      utl_file.fclose(handle);      if i=1 then
        arr(1):=0;
      else
        arr(1):=i;  
      end if;
      
      handle:=utl_file.fopen('e:\','new.txt','w'); 
      for i in arr.first..arr.last loop
        utl_file.put_line(handle,arr(i));
      end loop;
      utl_file.fclose(handle);
      
      exception 
        when others then
          dbms_output.put_line(sqlcode);   
          dbms_output.put_line(sqlerrm(sqlcode));   
    end;
      

  9.   

    楼主写的文件格式还是看了不明白
    我觉得对文件的读写还是不要用oracle好
    用其它语言比较好,比如java,perl等
      

  10.   

    楼主如果能把你的需求明确的说出来
    俺可以帮你写一程序,读写文本文件。。不需要用oracle的