首页 > 代码库 > 转:sqlplus与shell互相传值的几种情况
转:sqlplus与shell互相传值的几种情况
sqlplus与shell互相传值的几种情况
情况一:在shell中最简单的调用sqlplus
$cat test.sh
#!/bin/sh
sqlplus oracle/oracle@oracle>file.log <<EOF
select * from test;
exit
EOF #注意EOF要顶格写
$sh test.sh
$cat file.log
--省略若干系统提示信息-------
SQL>
EMPNO EMPNAME SAL DEPTNO
----- ------------- ----- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
--省略若干系统提示信息-------
将执行过程重定向入文件file.log,可通过cat file.log查看
情况二:直接将sqlplus的值赋值给shell变量
$cat test.sh
#!/bin/sh
# 将sqlplus的结果输出给变量VALUE
# set命令的使用可查询手册
#注意shell中等号两边不能有空格
VALUE=http://www.mamicode.com/`sqlplus -S /nolog < set heading off feedback off pagesize 0 verify off echo off conn oracle/oracle@oracle select count(*) from test; exit EOF` #输出记录数 echo "The number of rows is $VALUE." $sh test.sh The number of rows is 2. 显示结果正确,表test共2条记录 情况三:间接将sqlplus的值赋值给shell变量 $cat test.sh #!/bin/sh #利用COL column NEW_VALUE variable定义变量 #sqlplus执行完后最后返回值为v_coun #利用$?将最后返回值赋值给VALUE,也即为test的记录数 sqlplus -S /nolog <<EOF set heading off feedback off pagesize 0 verify off echo off conn oracle/oracle@oracle col coun new_value v_coun select count(*) coun from test; exit v_coun EOF VALUE="http://www.mamicode.com/$?" echo "The number of rows is $VALUE." $sh test.sh 2 The number of rows is 2. 脚本执行结果中第一个2为sqlplus返回值,第二个2为VALUE的值 情况四:将shell变量的值传给sqlplus使用 $cat test.sh #!/bin/sh #sqlplus引用shell变量TABLENAME的值 #注意赋值时,等号两边不能有空格 TABLENAME="test" sqlplus -S oracle/oracle@oracle <<EOF select * from ${TABLENAME}; exit $sh test.sh EMPNO EMPNAME SAL DEPTNO ----- -------------------------------------------------- ---------- ------ 10002 Frank Naude 500 20 10001 Scott Tiger 1000 40 脚本执行结果为:select * from test;的结果 情况五:通过交互方式手工输入shell变量值 $cat test.sh #!/bin/sh #将手工输入变量值读入变量TABLENAME echo "Enter the tablename you want to select:" read TABLENAME sqlplus -S oracle/oracle@oracle <<EOF select * from ${TABLENAME}; exit $sh test.sh #按提示输入表名test Enter the tablename you want to select: test EMPNO EMPNAME SAL DEPTNO ----- -------------------------------------------------- ---------- ------ 10002 Frank Naude 500 20 10001 Scott Tiger 1000 40 脚本执行结果为select * from test的执行结果 本文出自 “To_Be_Monster_Of_IT” 博客,请务必保留此出处http://nbmonster.blog.51cto.com/1977736/665767 转:sqlplus与shell互相传值的几种情况