В Oracle нет эквивалента begin tran
.
Oracle неявно запускает транзакцию при первом запуске некоторого DML.Транзакция продолжается до тех пор, пока мы не выполним COMMIT или ROLLBACK.Обратите внимание, что в Oracle команды DDL выдают неявные коммиты до и после выполнения;поэтому мы можем не только откатить оператор CREATE TABLE, но и откатить любые операторы DML, которые мы выполнили до этого оператора CREATE TABLE.
Autocommit - это антишаблон в моей книге: транзакция - это единица работы, которая во всех приложениях, кроме самых тривиальных, представляет собой серию утверждений.Фиксация после каждого оператора приводит к несогласованности, неустранимости и (потенциально) повреждению данных.
Однако, чтобы ответить на вопрос: Autocommit фиксирует на уровне оператора.Таким образом, нет способа откатить одну успешно завершенную транзакцию.Следовательно, если вы хотите иметь несколько операторов DML в одной транзакции с возможностью откатить незавершенную единицу работы, вам нужно сгруппировать операторы в блок PL / SQL.
Здесь у нас есть PL / SQLблок, который вставляет несколько записей в отдельные операторы.
begin
insert into t23 (id) values (1);
insert into t23 (id) values (2);
insert into t23 (id) values (3);
insert into t23 (id) values (4);
insert into t23 (id) values (1);
exception
when dup_val_on_index then
rollback;
raise;
end;
/
Если бы мы запустили этот блок на клиенте с AUTOCOMMIT, он вставил бы ноль записей.Autocommit работает на уровне выполнения, который в данном случае является блоком: либо целое успешно выполняется и фиксируется, либо не выполняется, а это не так.Следовательно, отказ пятой вставки пройти проверку первичного ключа вызывает откат предыдущих четырех вставок.
Обратите внимание, что четыре вставки будут откатываться даже без явного отката в обработчике исключений.Блокировка завершилась неудачно, транзакция не зафиксирована.
Так что же означает эта опция ?: tools -preferences - database - advance - autocommit checkbox
Это путь к меню изваш клиент IDE (Oracle SQL Developer?).AUTOCOMMIT - это опция клиента, которая выдает коммит после каждого оператора, выполняемого клиентом.