如果 PL/SQL 程序失败,则 shell 脚本出错

如果 PL/SQL 程序失败,则 shell 脚本出错

在 shell 脚本中,我调用 PL/SQL 存储过程。

sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF

但是当PL/SQL块中出现错误时,我需要错误地输出shell脚本,该脚本在Oracle中作为主机并发程序运行,但它没有这样做。

答案1

首先,如果发生 SQL 错误,您需要让 SQL*Plus 出错。您可以通过添加以下内容来做到这一点:

WHENEVER SQLERROR EXIT FAILURE

到你的 SQL 脚本(可能在顶部)。您还可以给出不同的代码(小非负整数;非零 = 失败)来代替单词FAILURE

这些将返回到 中的 shell 脚本$?。这样您就可以让 shell 脚本对其做出反应。总的来说,它看起来像这样:

sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
WHENEVER SQLERROR EXIT FAILURE
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF
if [ 0 -ne "$?" ]; then
    echo "Stored proc blew up." >&2
    exit 1
fi

当然,您可以使用不同的退出代码来指示不同的事情(例如,如果您正在调用多个存储过程,则可以为第一个存储过程退出 1,为第二个存储过程退出 2,等等)

相关内容