Oracle
 sql >> Base de données >  >> RDS >> Oracle

QUAND SQLERROR ne fonctionne jamais

Considérez ci-dessous l'extrait générique :

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

Ici, $? est défini sur le statut de sortie de cmd1 . Le statut de sortie de cmd2 est perdu.

Dans votre cas, sqlplus se trouve être cmd2. Ainsi, le statut de sortie de cette commande n'est pas capturé dans $? .

Vous pouvez essayer ceci ;

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

Notez que si cmd1 est une structure complexe (comme while read par exemple) tout ce que vous exécutez dans cette boucle while sera exécuté dans un sous-shell et tout environnement (variables/pwd) modifié sera perdu.