可以用 Oracle 中的 utl_file 包进行数据写入文件的操作,具体代码如下:declare
  myonwer char(20);
  mytable char(20);
  mychar char(400);
  mychar1 char(255);
  /*设置一个文件对象*/
  myft utl_file.file_type;
begin
  /*要执行的SQL语句*/
  myonwer:='ss';
  mytable:='bb';
  mychar:=getcolumnnames(trim(myonwer),trim(mytable));
  mychar1:='insert into ' || trim(myonwer) || '.' || trim(mytable) || ' select ' || trim(mychar) || ' from ZEALOT.' || trim(mytable) || '_BAK;';
  /*打开要写的文件*/
  myft:=utl_file.fopen('D:\aa','mytest.txt','a');
  /*将要写的内容写入文件*/
  utl_file.put_line(myft,mychar1);
  /*关闭文件*/
  utl_file.fclose(myft);
end;
一定要注意在使用 utl_file 包前一定要设置一个 Orcale 中的目录对象

解决方案 »

  1.   

    create or replace procedure test as 
    f UTL_FILE.file_type; 
    s varchar2(200); 
    a varchar2(200); 
    path varchar2(50); 
    begin 
    path:='c:'; 
    f:=utl_file.fopen('c:','aa.CSV','R'); 
    loop 
    utl_file.get_line(f,s); 
    N:=INSTR(S,',',1,1); 
    a := substr(s,.....) 
    select count(*) into i from aa where aa = a; 
    if i > 0 then 
    update .... set ... 
    else 
    insert into ..... 
    end if; 
    end loop; 
    utl_file.fclose(f); 
    COMMIT; 
    EXCEPTION 
    when NO_DATA_FOUND then 
    utl_file.fclose(f); 
    rollback; 
    end; 
    /
      

  2.   

    谢谢beckhambobo(beckham) 
    不过,我是在客户端按照用户输入的条件得到一个recordset,然后把它保存到客户端。用存储过程恐怕不行吧
      

  3.   

    用utl_file写存储过程存放服务器,在用WININET,DOWN到本地
      

  4.   

    呵呵,好注意。不过,先保存到服务器,再拷贝到客户端。这两个时间加起来,恐怕并不省时间了。和我遍历整个recordset,然后,fprintf差不多的时间了。
    recordset有个save函数,奇怪的是只能保存为xml文件和ADTG文件。难道不能直接保存成文本文件吗?