Vous devez déclarer la gestion de la condition d'erreur avant que l'erreur ne se produise :
Whenever sqlerror exit sql.sqlcode;
DROP user MYUSER cascade;
EXIT 0;
Vous pouvez modifier la gestion à différents moments du script. Par exemple, vous pouvez effectuer un dépôt de protection avant la création, en ignorant une erreur sur le dépôt, mais en vous arrêtant quand même si l'étape suivante échoue :
whenever sqlerror continue
drop ...
whenever sqlerror exit failure
create...
alter...
etc
Incidemment, au pays d'Unix, cette approche est limitée car la plupart (tous ?) des shells ont un code de retour limité et des nombres plus élevés s'enroulent; ORA-0918 serait donc signalé comme 126, ce qui le rend impossible à interpréter. Plus important encore, certaines valeurs reviendront à zéro, ce qui donnera l'impression qu'aucune erreur ne s'est produite. Heureusement, vous n'avez pas ce problème avec %errorlevel%.