私は問題を解決し、誰かがそのような問題に遭遇した場合に備えて、解決策を投稿します.
スクリプトに DDL コマンドを入れなければ、ロールバックは正しく実行されます。
スクリプトは次のとおりです。
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
insert into a values ('x');
commit;
動作します。
また、DDL が使用されている場合、通常、Oracle はロールバック機能を提供しません。