Sie müssen die Behandlung der Fehlerbedingung deklarieren, bevor der Fehler auftritt:
Whenever sqlerror exit sql.sqlcode;
DROP user MYUSER cascade;
EXIT 0;
Sie können die Handhabung an verschiedenen Stellen im Skript ändern. Beispielsweise könnten Sie vor dem Erstellen einen schützenden Drop ausführen, indem Sie einen Fehler im Drop ignorieren, aber trotzdem anhalten, wenn der nächste Schritt fehlschlägt:
whenever sqlerror continue
drop ...
whenever sqlerror exit failure
create...
alter...
etc
Übrigens ist dieser Ansatz im Unix-Land begrenzt, da die meisten (alle?) Shells einen begrenzten Rückgabecode haben und höhere Zahlen umlaufen; ORA-0918 würde also als 126 gemeldet, was eine Interpretation unmöglich macht. Noch wichtiger ist, dass einige Werte auf Null umbrechen, sodass es so aussieht, als wäre kein Fehler aufgetreten. Glücklicherweise haben Sie dieses Problem mit %errorlevel% nicht.