Shell 与 sqlplus 交互 的几种情况汇总

一、最简单的shell里调用sqlplus.

$ vi test1.sh
#!/bin/bash
sqlplus -S /nolog > result.log <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn scotter/tigger
select sysdate from dual;
exit
EOF
$ chmod +x test1.sh
$ ./test1.sh

二、把sqlplus执行结果传递给shell方法一
注意sqlplus段使用老板键`了, 赋变量的等号两侧不能有空格.

$ vi test2.sh

#!/bin/bash

 #不需要> result.log或者>/dev/null
VALUE=`sqlplus -S /nolog <<EOF  
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn scotter/tigger
select count(*) from tab;
exit
EOF`
if [ "$VALUE" -gt 0 ]; then
        echo "The number of rows is $VALUE."
        exit 0
else
        echo "There is no row in the table."
fi

$ chmod +x test2.sh
$ ./test2.sh

三、把sqlplus执行结果传递给shell方法二
注意sqlplus段使用 col .. new_value .. 定义了变量并带参数exit, 然后自动赋给了shell的$?,这种情况使用比较狭窄,是对返回数字的情况专用,如果返回字符串,不是数字,退出码的方法就无能为力了。 而方法一是不管什么情况通吃的。

$ vi test3.sh 
#!/bin/bash 
#用退出码返回值,需要重定向‘> result.log’,否则会显示到屏幕上。 
sqlplus -S /nolog > result.log <<EOF      
set heading off feedback off pagesize 0 verify off echo off numwidth 4 
conn scotter/tigger 
col   coun   new_value   v_coun 
select count(*) coun from tab; 
exit v_coun 
EOF 
VALUE="$?" 
echo "The number of rows is $VALUE." 
$ chmod +x test3.sh 
$ ./test3.sh


四、把shell程序参数传递给sqlplus
$1表示第一个参数, sqlplus里可以直接使用, 赋变量的等号两侧不能有空格不能有空格.

$ vi test4.sh 
#!/bin/bash 
NAME="$1" 
sqlplus -S scotter/tigger <<EOF 
select * from tab where tname = upper('$NAME'); 
exit 
EOF 
$ chmod +x test4.sh 
$ ./test4.sh ttt


五、为了安全要求每次执行shell都手工输入密码

$ vi test5.sh 
#!/bin/bash 
echo -n "Enter password for u_test:" 
read PASSWD 
sqlplus -S /nolog <<EOF 
conn scotter/$PASSWD 
select * from tab; 
exit 
EOF 
$ chmod +x test5.sh 
$ ./test5.sh


六、为了安全从文件读取密码
对密码文件设置权限, 只有用户自己才能读写.

$ vi test6.sh 
#!/bin/bash 
PASSWD=`cat u_test.txt` 
sqlplus -S /nolog <<EOF 
conn scotrer/$PASSWD 
select * from tab; 
exit 
EOF 
$ chmod +x test6.sh 
$ ./test6.sh


七 、sqlplus的结果存储在文件中

#!/bin/sh 
sqlplus -S "scotter/tigger"<<EOF 
set heading off 
set feedback off 
set pagesize 0 
set verify off 
set echo off 
spool spool_file 
SELECT * from teacher; 
spool off 
exit; 
EOF

与下列代码效果是相同的:

#!/bin/sh 
sqlplus -S "scotter/tigger"<<EOF > spool_file 
set heading off 
set feedback off 
set pagesize 0 
set verify off 
set echo off 
SELECT * from teacher; 
exit; 
EOF

--End--

转载于:https://my.oschina.net/u/2409113/blog/479454

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值