sql >> Base de Datos >  >> RDS >> Oracle

CUANDO SQLERROR nunca funciona

Considere el siguiente fragmento genérico:

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

Toma, $? se establece en el estado de salida de cmd1 . El estado de salida de cmd2 está perdido.

En tu caso, sqlplus pasa a ser cmd2. Entonces, el estado de salida de ese comando no se captura en $? .

Podrías probar esto;

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

Tenga en cuenta que si cmd1 es una estructura compleja (como while read por ejemplo) cualquier cosa que ejecute en ese ciclo while se ejecutará en una subcapa y cualquier entorno (variables/pwd) modificado se perderá.