sqlplus 运行大量sql脚本时遇到问题分析(很常见)

sqlplus -s  / as sysdba <
@test.sql
EOF






第二个EOF前面有没有exit效果都一样。 也就是说缺省就是exit


test.sql里最后加不加commit效果都一样,exit缺省的时候就是提交(这个可以控制)




test.sql 名字如果是带空格t est.sql,怎么办?


(下面是好多sql文件进行遍历)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF




【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <
@"$line"
EOF
done


用while循环,而不用for in 是因为如果文件名有空格,ls *sql出来以后,line取值是按照空格或者换行符作为间隔符号,
所以一个文件名会被空格分成为2个值使用;而用while read 则是只按照换行符作为间隔符号,所以一个文件名不会被分割。这就是这两种方式的区别。
下面的sqlplus 下面执行@"line",变量line需要加双引号,防止文件名被空格分割解析






sqlplus 的两种方式对比对比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;


#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <
@"$line"
EOF


上面的exit退出动作是由EOF完成的


【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;


#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"


上面的exit退出动作,只能在test.sql中完成。
在这种情况下如果不在test.sql中加exit,那么循环会在第一次sqlplus 执行的时候阻塞,直到被手工处理以后,才能进入到下一次循环。







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27042095/viewspace-1096885/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27042095/viewspace-1096885/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值