Я не думаю, что есть простое решение для этого, потому что у вас есть DDL в вашем скрипте. DDL выполняет commit
перед обработкой, поэтому rollback
не поможет.
В качестве альтернативы вы можете использовать параметр флэшбэка Oracle. Но это влияет на всю базу данных. Вы создаете flashback restore point
, запускаете сценарий, если какие-либо ошибки произошли, вы возвращаете базу данных для восстановления точки восстановления. Это вернет все изменения во все схемы вашей базы данных. Это хорошо, когда у вас есть отдельная база данных для запуска / тестирования ваших скриптов. Это довольно быстро. База данных должна находиться в режиме архивирования.
Другой вариант - использовать утилиту экспорта / импорта (expdp / impdp). Это также вряд ли автоматизировано в одном скрипте, поэтому вы делаете восстановление вручную. Вы берете дамп экспорта, запускаете сценарий, если какие-либо ошибки произошли - вы восстанавливаете дамп вашей схемы БД, выполняющей impdp.