Oracle
 sql >> Datenbank >  >> RDS >> Oracle

WHENEVER SQLERROR funktioniert nie

Betrachten Sie das folgende generische Snippet:

$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?

Hier, $? wird auf den Exit-Status von cmd1 gesetzt . Der Exit-Status von cmd2 ist verloren.

In Ihrem Fall sqlplus zufällig cmd2. Der Exit-Status dieses Befehls wird also nicht in $? erfasst .

Sie könnten dies versuchen;

$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
>     [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0

Beachten Sie, dass wenn cmd1 ist eine komplexe Struktur (wie while read zB) alles, was Sie in dieser While-Schleife ausführen, wird in einer Subshell ausgeführt und jede geänderte Umgebung (Variablen/pwd) geht verloren.