Shell-Skript mit Fehler ausgeben, wenn das PL/SQL-Programm fehlschlägt

Shell-Skript mit Fehler ausgeben, wenn das PL/SQL-Programm fehlschlägt

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).

verwandte Informationen