PL/SQL プログラムが失敗した場合、シェル スクリプトにエラーが発生します。

PL/SQL プログラムが失敗した場合、シェル スクリプトにエラーが発生します。

シェル スクリプトでは、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 ブロックにエラーがある場合、Oracle でホスト同時実行プログラムとして実行されているシェル スクリプトをエラーにする必要がありますが、そうしていません。

答え1

まず、SQL エラーが発生した場合に SQL*Plus でエラーが発生するようにする必要があります。これを行うには、次のコードを追加します。

WHENEVER SQLERROR EXIT FAILURE

を SQL スクリプトに追加します (おそらく一番上)。 という単語の代わりに、異なるコード (負でない小さな整数、ゼロ以外 = 失敗) を指定することもできますFAILURE

これらは のシェル スクリプトに戻ります$?。したがって、シェル スクリプトがそれに反応するようにすることができます。全体として、次のようになります。

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

もちろん、異なる終了コードを使用して異なることを示すことができます (たとえば、複数のストアド プロシージャを呼び出していた場合、最初のストアド プロシージャが失敗した場合は exit 1 を使用し、2 番目のストアド プロシージャが失敗した場合は exit 2 を使用するなど)。

関連情報