从 sqlplus 运行 sql 时遇到一些问题,并希望将 o/p 分配给 Unix 变量。输出在日志文件中显示正确,但未分配给变量。代码 :
PASSWD 变量包含用户/密码/数据库详细信息。
STATUS=`sqlplus -s /nolog <<EOF>> /home/test_db.log
CONNECT ${PASSWD}
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
set termout off
set showmode off
set heading off
set echo off
set timing off
set time off
set feedback 0
set pagesize 0
set embedded ON
set verify OFF
select status from int_control_tab where rec_no=877 and process_date=to_date('15/02/2017','dd/mm/yyyy');
exit;
EOF`
echo "STATUS :" ${STATUS}
即使我在日志文件中得到 o/p 即 1 值,但没有为 STATUS 变量赋值。请建议。
答案1
由于您将命令的输出重定向到文件中,因此没有输出可放入变量中。
您可以使用该tee
实用程序来解决此问题:
STATUS=$( sqlplus ... <<EOF | tee -a logfile
...
EOF
)
tee
会将其输入复制到所有命名文件以及其自己的标准输出(将插入到您的变量中)。
另外,请对密码加双引号,"$PASSWD"
否则如果密码包含特殊字符,您将遇到各种问题。"$STATUS"
当你这样做时也是如此echo
。