Unix 变量无法存储 sql 查询输出

Unix 变量无法存储 sql 查询输出

从 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

相关内容