问题1:
我编写的bat文件内容是:sqlplus  system/manager@orcl  @C:\insert_into_temp.sqlsqlplus  system/manager@orcl  @C:\update_temp.sqlinsert_into_temp.sql的内容是 
  INSERT INTO T_temp 
  SELECT * 
  FROM T_temp2; 
  COMMIT; update_temp.sql的内容是 
 UPDATE T_temp 
 SET T_temp.A = 'aa';
  COMMIT;这两条语句单独在bat文件里执行都没有问题,但是放在一起就只能执行第一条,请问一起执行的应该怎么写,请高手帮忙做答!问题2
 bat文件如何执行一个过程,或者函数,或者包(PL SQL编写的),请问如何执行这些文件
  过程,函数 定义如下
   create or replace procedure XX ()/ create or replace function XX ()
     IS
     BEGIN
     END;
   包也同样。
请问如何调用这些,请高手帮忙,很着急,谢谢! 
  
 

解决方案 »

  1.   

    问题1:查看一下sqlplus使用说明就知道其参数怎么使用了:
    [code=BatchFile]
    d:\mytest>sqlplus -helpSQL*Plus: Release 9.2.0.8.0 - Production用法: SQLPLUS [ [<option>] [<logon>] [<start>] ]
    其中 <option> ::= -H | -V | [ [-L] [-M <o>] [-R <n>] [-S] ]
         <logon>  ::= <username>[/<password>][@<connect_string>] | / | /NOLOG
          <start>  ::= @<URI>|<filename>[.<ext>] [<parameter> ...]
            "-H" 显示 SQL*Plus 的版本标帜和使用语法
            "-V" 显示 SQL*Plus 的版本标帜
    "-L" 只尝试登录一次
            "-M <o>" 使用 HTML 标志选项 <o>
            "-R <n>" uses restricted mode <n>
            "-S" uses silent moded:\mytest>
    [/code]start就是你的参数:脚本文件 (注意只有一个)所以解决思路是:
    合并成一个脚本,作为sqlplus的start参数执行。
    bat文件的内容为:
    [code=BatchFile]
    sqlplus  system/manager@orcl  @C:\mysql.sql 
    [/code]
    mysql.sql的内容为:INSERT INTO T_temp 
      SELECT * 
      FROM T_temp2; 
      COMMIT; UPDATE T_temp 
     SET T_temp.A = 'aa'; 
      COMMIT; 
    或者在执行的脚本里再调用其他脚本,如
    bat文件的内容为:
    [code=BatchFile]
    sqlplus  system/manager@orcl  @C:\mysql.sql 
    [/code]mysql.sql的内容为:@c:\insert_temp.sql;
    @c:\update_temp.sql;
    insert_temp.sqlINSERT INTO T_temp 
      SELECT * 
      FROM T_temp2; 
      COMMIT; 
    update_temp.sqlUPDATE T_temp 
     SET T_temp.A = 'aa'; 
      COMMIT; 问题2:把建存储过程、包的脚本作为参数在sqlplus里执行。如mybat.bat内容为
    [code=BatchFile]
    sqlplus  system/manager@orcl  @C:\myproc.sql 
    [/code]
    调用时保存日志,如mybat.bat>mybat.log 
      

  2.   

     为什么两条SQL执行分开写不可以呢
    sqlplus  system/manager@orcl  @C:\insert_into_temp.sql 
    sqlplus  system/manager@orcl  @C:\update_temp.sql 
      

  3.   

    你执行了第一句后,sqlplus不会自动退回批处理调用的地方,所以你的第二条语句在批处理里没法执行。
    在这两句之间加上exit退出sqlplus,就可以了。如:
    [code=BatchFile]
    sqlplus  system/manager@orcl  @C:\insert_into_temp.sql
    exit 
    sqlplus  system/manager@orcl  @C:\update_temp.sql 
    [/code]
      

  4.   

    不好意思,说错了。刚刚做了试验,应该是在脚本insert_into_temp.sql里最后添加两个
    exit
    exit
    即可。
      

  5.   

    太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!
      

  6.   

    太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!
      

  7.   

    太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!