unix脚本在使用wait语句时退出oracle错误

时间:2013-08-23 21:07:51

标签: oracle shell unix

我有一个ksh shell脚本,它运行带有background和wait语句的.sql脚本。我是否有可能捕获通用的“ORA-0”错误并完全退出?

到目前为止:

$ORACLE_BASE/bin/sqlplus 2.sql &
pid2=$!
echo "Waiting for PID:$pid2"
wait $pid2
#look for error here
#exit program if oracle error

1 个答案:

答案 0 :(得分:2)

SQL * Plus本身就是一种shell,所以它从oracle中捕获错误并继续执行。您希望查看SQL * Plus命令WHENEVER SQLERROR,尤其是WHENEVER SQLERROR EXIT,它允许立即退出并显示错误代码。

因此,在.sql脚本的开头添加类似的内容:

WHENEVER SQLERROR EXIT SQL.SQLCODE

如果出现SQL错误,它将退出相关的错误代码。

现在,在wait之后的shell脚本中,您可以通过阅读$?来获取错误。

类似的东西(取决于shell的确切语法):

wait $pid2
ret=$?
if [ $ret != 0 ]  # if not success
then
    exit $ret     # propagate error code
fi