我有一个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
答案 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