È necessario dichiarare la gestione della condizione di errore prima che si verifichi l'errore:
Whenever sqlerror exit sql.sqlcode;
DROP user MYUSER cascade;
EXIT 0;
È possibile modificare la gestione in un punto diverso dello script. Ad esempio potresti fare un drop protettivo prima di creare, ignorando un errore sul drop, ma fermandoti comunque se il passaggio successivo fallisce:
whenever sqlerror continue
drop ...
whenever sqlerror exit failure
create...
alter...
etc
Per inciso, in Unix-land questo approccio è limitato perché la maggior parte (tutte?) delle shell hanno un codice di ritorno limitato e numeri più alti si avvolgono; quindi ORA-0918 verrebbe segnalato come 126, rendendo impossibile l'interpretazione. Ancora più importante, alcuni valori andranno a capo a zero, facendo sembrare che non si sia verificato alcun errore. Fortunatamente non hai questo problema con %errorlevel%.