在 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,等等)