シェル スクリプトでは、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 を使用するなど)。