Saya memecahkan masalah dan saya memposting kembali solusinya jika ada yang mengalami masalah seperti itu.
Jika saya tidak memasukkan perintah DDL dalam skrip, maka rollback dilakukan dengan benar.
Jadi scriptnya:
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
insert into a values ('x');
commit;
bekerja.
Dan jika DDL digunakan maka secara umum Oracle tidak menyediakan fungsionalitas rollback.