Oracle
 sql >> Database >  >> RDS >> Oracle

QUANDO SQLERROR non funziona mai

Considera di seguito lo snippet generico:

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

Qui, $? è impostato sullo stato di uscita di cmd1 . Lo stato di uscita di cmd2 è perso.

Nel tuo caso, sqlplus sembra essere cmd2. Quindi, lo stato di uscita di quel comando non viene acquisito in $? .

Potresti provare questo;

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

Nota che se cmd1 è una struttura complessa (come while read ad es.) qualsiasi cosa eseguita in quel ciclo while verrà eseguita in una subshell e qualsiasi ambiente (variabile/pwd) modificato andrà perso.