Shell与SQLPLUS的交互----参数传递返回值unix上要执⾏oracle的sql,常见的是⽤shell脚本来调⽤sqlplus执⾏sql。
⽤这种⽅式,⾃然shell和sqlplus就有可能进⾏交互---shell传递参数进sqlplus,sqlplus将结果返回给shell。
从shell传参数进sqlplus是很简单的,可以在sql语句中⽤${shell变量名}的⽅式直接引⽤shell的变量.
eg,
transaction_sequence=$1
sqlplus -S stag_maint/stag_maint_ps@oraods << EOF
delete ODSDEFAULT_ODS_CONTROL WHERE TRANSACTION_SEQUENCE = ${transaction_sequence}; exit;
EOF
但如果我⼀个sql的执⾏结果需要返回给shell,那该怎么处理呢?shell中可没法直接来引⽤sqlplus⾥的变量。
经过研究,我发现以下两种⽅式可以达到这个⽬的。
⽅法1-----------
VALUE=`sqlplus -S stag_maint/stag_maint_ps@oraods << EOF
set heading off
set pagesize 0;
set feedback off;
set verify off;
set echo off;
select sysdate from dual;
exit;
END`
if [ -z "$VALUE" ]; then
echo "No rows returned from database"
exit 0
else
echo "Max Sequence Number: $VALUE"
fi
⽅法2-----------
sqlplus -S stag_maint/stag_maint_ps@oraods << EOF
set heading off feedback off pagesize 0 verify off echo off
col coun new_value v_coun
select 255 coun from dual;
exit v_coun
EOF
shell脚本返回执行结果
VALUE="$?"
echo "The number of rows is $VALUE."
不过⽅法2有个局限性,exit后⾯跟的数值只能在0-255之间。超过后会⾃动以255取余。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。