当前位置: 代码迷 >> SQL >> shell与sqlplus其间通讯
  详细解决方案

shell与sqlplus其间通讯

热度:30   发布时间:2016-05-05 12:44:24.0
shell与sqlplus之间通讯

#!/bin/sh

一.最简单的调用sqlplus
sqlplus -S "sys/unimas as sysdba" << !
select to_char(sysdate,'yyyy-mm-dd') today from dual;
exit;
!

[[email protected] shell_test]$ ./echo_time?

TODAY
----------
2011-03-21

-S 是silent mode,不输出类似“SQL>”,连接数据库,关闭数据库之类的信息。



eof可以是任何字符串 比如"laldf"那么当你输入单独一行laldf时"shell认为输入结束,但是必须表示块开始必须使用<<;
开始和结束要匹配这个符号“<<”后面的内容
举例子:

[[email protected] shell_test]$ sqlplus -s "sys/unimas as sysdba" << abc
> select to_char(sysdate,'yyyy-mm-dd') today from dual;
> exit;
> abc

TODAY
----------
2011-03-21

二.sqlplus的结果传递给shell的方法一

[[email protected] shell_test]$ cat test2.sh?
#!/bin/bash
VALUE=`sqlplus -S "test/unimas" << !
set heading off
set feedback off
set pagesize 0
set verify off
set echo off
select to_char(sysdate,'yyyy-mm-dd') today from dual;
exit
!`
echo $VALUE
if [ -n "$VALUE" ]; then
echo "The rows is $VALUE"
exit 0
else
echo "There is no row"
fi

三.sqlplus的结果传递给shell的方法二

[[email protected] shell_test]$ cat test1.sh?
#!/bin/bash
sqlplus -S "test/unimas" << !
set heading off
set feedback off
set pagesize 0
set verify off
set echo off
col coun new_value v_coun
select count(*) coun from lesson;
exit v_coun
!
VALUE="$?"
echo "show row:$VALUE"

col coun new_value v_coun v_coun为number类型。因为exit 只能返回数值类型。

四.把shell参数传递给sqlplus

#!/bin/bash
t_id="$1"
sqlplus -S "test/unimas" << !
set heading off
set feedback off
set pagesize 0
set verify off
set echo off
select teachername from teacher where id=$t_id;
exit
!

五.sqlplus的结果存储在文件中

#!/bin/sh
sqlplus -S "test/unimas"<<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

http://blog.chinaunix.net/space.php?uid=9124312&do=blog&id=181372


?

查看调度系统状态脚本:

#!/bin/sh

if [[ -z "$1" ]] || [[ "$1" -ne 0 && "$1" -ne 2 ]]?????? #使用[[ ]] 进行逻辑短路操作
then
??? echo "Please input your parameter: query status[0,2]!"
??? exit
fi

#for buname in cnlog enlog ItLog JrLog AuLog InnerLog
for buname in cnlog enlog
do
??? sqlplus -S [email protected]_testdb' << abc??????? #使用 << EOF方式输入信息
??? set line 155
??? set pages 9999
??? SELECT /*+ PARALLEL(a,4) */ * FROM $buname.hla_job_rec a where status = $1;
??? exit
abc
done

  相关解决方案