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

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

おすすめ記事