Im Shell-Skript rufe ich eine gespeicherte PL/SQL-Prozedur auf.
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
Wenn jedoch ein Fehler im PL/SQL-Block auftritt, muss ich das Shell-Skript, das als paralleles Hostprogramm in Oracle ausgeführt wird, als Fehler ausgeben, was jedoch nicht der Fall ist.
Antwort1
Zuerst müssen Sie SQL*Plus dazu bringen, einen Fehler auszugeben, wenn ein SQL-Fehler auftritt. Sie können dies tun, indem Sie Folgendes hinzufügen:
WHENEVER SQLERROR EXIT FAILURE
zu Ihrem SQL-Skript (wahrscheinlich ganz oben). Sie können anstelle des Wortes auch andere Codes (kleine nicht negative Ganzzahlen; ungleich Null = Fehler) eingeben FAILURE
.
Diese werden an Ihr Shell-Skript zurückgegeben $?
. Sie können dann Ihr Shell-Skript darauf reagieren lassen. Insgesamt würde es ungefähr so aussehen:
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
Natürlich können Sie verschiedene Exit-Codes verwenden, um unterschiedliche Dinge anzuzeigen (wenn Sie beispielsweise mehrere gespeicherte Prozeduren aufrufen, können Sie beim Absturz der ersten Prozedur Exit 1, beim Absturz der zweiten Prozedur Exit 2 usw. verwenden).