如何在一个bat文件中执行多个sql语句?急急急!!!

zuoluo911 2008-07-25 11:32:55
问题1:
我编写的bat文件内容是:sqlplus system/manager@orcl @C:\insert_into_temp.sql

sqlplus system/manager@orcl @C:\update_temp.sql

insert_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;
包也同样。
请问如何调用这些,请高手帮忙,很着急,谢谢! 


  
 
...全文
693 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kun5891504 2011-07-12
  • 打赏
  • 举报
回复
孑冰 2011-02-23
  • 打赏
  • 举报
回复
要是再详细一点就更好了
flzvg 2009-11-17
  • 打赏
  • 举报
回复
太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!
flzvg 2009-11-17
  • 打赏
  • 举报
回复
太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!
flzvg 2009-11-17
  • 打赏
  • 举报
回复
太感谢njhart2003了,我是个新手,这个问题已经折磨我两三天了!才查到您的答案!
njhart2003 2008-07-25
  • 打赏
  • 举报
回复
不好意思,说错了。刚刚做了试验,应该是在脚本insert_into_temp.sql里最后添加两个
exit
exit
即可。


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


zuoluo911 2008-07-25
  • 打赏
  • 举报
回复
为什么两条SQL执行分开写不可以呢
sqlplus system/manager@orcl @C:\insert_into_temp.sql
sqlplus system/manager@orcl @C:\update_temp.sql
njhart2003 2008-07-25
  • 打赏
  • 举报
回复
问题1:

查看一下sqlplus使用说明就知道其参数怎么使用了:
[code=BatchFile]
d:\mytest>sqlplus -help

SQL*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 mode

d:\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.sql

INSERT INTO T_temp
SELECT *
FROM T_temp2;
COMMIT;


update_temp.sql

UPDATE 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





17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧