Shell脚本中的SQL*Plus:将计数(*)发送到变量,将错误发送到文件
我正在从Korn shell(ksh)调用Oracle SQL*Plus 我的最终目标是将SQL语句的Shell脚本中的SQL*Plus:将计数(*)发送到变量,将错误发送到文件,sql,oracle,shell,unix,Sql,Oracle,Shell,Unix,我正在从Korn shell(ksh)调用Oracle SQL*Plus 我的最终目标是将SQL语句的COUNT(*)中的值获取到shell脚本变量中 但是,如果出现SQL错误,我希望完整地报告SQL异常并终止脚本 我很难满意地解释这两种情况 #!/bin/ksh test_count=$(sqlplus -s scott/tiger << EOF1 WHENEVER SQLERROR EXIT 1 SET PAGESIZE 0 FEEDBACK OFF VERIF
COUNT(*)
中的值获取到shell脚本变量中
但是,如果出现SQL错误,我希望完整地报告SQL异常并终止脚本
我很难满意地解释这两种情况
#!/bin/ksh
test_count=$(sqlplus -s scott/tiger << EOF1
WHENEVER SQLERROR EXIT 1
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM scott.emp WHERE empno > 7777;
EXIT;
EOF1
)
sql_ret_code=$?
if [ $sql_ret_code -ne 0 ]
then
echo "Error encountered."
echo
exit 1
fi
echo "test_count = $test_count"
exit 0
我一直在尝试将我的stderr
重定向到一个文件,在出现异常时将其重定向到“cat
”,但随后我的非错误条件输出也被定向到该文件,这是我不想要的
如果没有类似的SQL错误,我只希望将COUNT(*)
的值直接指向shell脚本变量test\u COUNT
另一方面,如果SQL引发异常,我更愿意将该错误指向一个文件,然后从我的“遇到错误”条件/If
子句中cat
该文件
可能吗
谢谢你。我可能错过了什么,但你有一切可以让它工作 除非您太早离开脚本(使用退出1): 在出现错误的情况下,您不能退出,因为您希望显示的错误在结果变量
test\u count
中!那为什么不把它也展示出来呢?以下是我可以提出的建议
[...]
if [ $sql_ret_code -ne 0 ]
then
echo "Error encountered."
echo
echo "ERROR: $test_count"
echo "abort."
exit 1
fi
echo "test_count = $test_count"
exit 0
(希望我没有公然退出比赛;)
[...]
if [ $sql_ret_code -ne 0 ]
then
echo "Error encountered."
echo
echo "ERROR: $test_count"
echo "abort."
exit 1
fi
echo "test_count = $test_count"
exit 0