SQL>spool c:\aa.log
SQL>@test.sql "mItem"
SQL>spool off

解决方案 »

  1.   

    spool可以将内容输出到.txt或.sql文件中.VB中调用?就是用读文本文件啊.
      

  2.   

    spool 导出的不是lst文件吗?
      

  3.   

    spool c:\aa.log好用,先谢谢大家,尤其是freddy2003。但是请问在vb中如何调用sqlplus,并且运行这些sql文,生成log呢??
      

  4.   

    把文件写成脚本: 
    C:\test\test.bat内容:
    sqlplus 用户名/密码@数据库sid @c:\test\sql.txt       <---用自己的信息代替C:\test\sql.txt内容:
    spool c:\test\test.log
    select * from testa;
    spool off
    VB中的代码:
    Private Sub Command1_Click()
        Dim RetVal
        RetVal = Shell("C:\test\test.bat", 1)   
    End Sub运行VB程序,点command1按钮,然后将在c:\test\生成test.log文件,内容:表testa中的数据;
      

  5.   

    To dinya2003(OK):
       非常感谢,我试了一下你的方法,ok,通过,呵呵!
       但是现在有一个问题还想请教:我现在有3个.sql文件(1.sql,2.sql,3.sql)要执行,并出log。我现在是这么写的:start.sql内容:
      spool c:\aa.log
      /end.sql内容:
      spool off
      /shell.bat内容:
      SQLPLUS 用户名/密码@数据库sid @start
      SQLPLUS 用户名/密码@数据库sid @1 "参数"
      SQLPLUS 用户名/密码@数据库sid @2 "参数"
      SQLPLUS 用户名/密码@数据库sid @3 "参数"
      SQLPLUS 用户名/密码@数据库sid @end然后运行shell.bat,此时无法通过,不知道哪里写法不对阿?
      

  6.   

    而且我想要把三个sql文(肯定是.sql文件形式)的执行结果输出到一个log文件中,这又应该怎么做呢?
      

  7.   

    首先我觉得不应该使用spool在应用程序中进行向文件的输出,因为这样的假脱机会把所有的信息都输入到文件,造成很多不必要的信息。
    在Oracle中提供了文件操作的包 utl_file ,可以使用这个保重的方法打开文件,向文件中写入所需信息,在关闭文件,这才是我认为正确的处理方式。utl_file.fopen(location in varchar2,filename in varchar2,open_mode in varchar2)
    fclose(dile_handle in out file_type)
    utl_file.put_line(file_handle in file_type, buffer in varchar2)
    例子:set serveroutput on;
    declare
      strdwdm varchar2(20);
      strdwmc varchar2(20);
      myfile utl_file.file_type;
      cursor mycs is select dwdm,dwmc from bjxt.gg_zd_dw where dwdm like 'hhh%';
    begin
      open mycs;
      myfile:=utl_file.fopen('MYDIR','mydwdm.txt','w');//其中MYDIR是一个Oracle的路径对象,使用 create diretory MYDIR 'c:\aa';
      utl_file.put_line(myfile,'单位代码:          单位名称:');
      fetch mycs into strdwdm,strdwmc;
      while mycs%found loop
        utl_file.put_line(myfile,strdwdm || '    ' || strdwmc);
        fetch mycs into strdwdm,strdwmc;
      end loop;
      close mycs;
      utl_file.fclose(myfile);
    end;
      

  8.   

    如果有几个sql要执行.修改上例中的C:\test\sql.txt文件:C:\test\sql.txt内容:
    spool c:\test\test.log
    select * from testa;
    select * from testb;
    select * from testc c where c.id=6;
    ...
    spool off
      

  9.   

    To dinya2003(OK):
      我的sql文不是直接写的,都是存成了.sql文件的,所以不知道怎么写了?我的写法:
    现在有3个.sql文件(1.sql,2.sql,3.sql)要执行,并出log。start.sql内容:
      spool c:\aa.log
      /end.sql内容:
      spool off
      /shell.bat内容:
      SQLPLUS 用户名/密码@数据库sid @start
      SQLPLUS 用户名/密码@数据库sid @1 "参数"
      SQLPLUS 用户名/密码@数据库sid @2 "参数"
      SQLPLUS 用户名/密码@数据库sid @3 "参数"
      SQLPLUS 用户名/密码@数据库sid @end
      

  10.   

    To zealot_zk(风中追风) :
       用utl_file包出错阿,提示我定义myfile utl_file.file_type出错。而且sql文都是客户给的,不能随便改阿!倒霉的阿!现在就是有3个写好的sql文文件(1.sql,2.sql,3.sql),里面不是select操作,而是一些比较表结构的操作,现在就是要把3个sql文件的执行结果输出到另外一个log文件中!
      

  11.   

    把你的3个.sql中的内容拷贝到C:\test\sql.txt内容:
    spool c:\test\test.log
    3个sql的内容呀
    spool off这样不可以吗
      

  12.   

    最好用UTL_FILE包,用个bat批处理可以认为是歪门邪道,虽然可以实现。