Rozwiązałem problem i odsyłam rozwiązanie na wypadek, gdyby ktoś napotkał taki problem.
Jeśli nie umieszczę poleceń DDL w skrypcie, wycofanie zostanie wykonane poprawnie.
Skrypt:
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
insert into a values ('x');
commit;
Pracuje.
A jeśli używany jest DDL, to na ogół Oracle nie zapewnia funkcji cofania zmian.