Пример установки границ транзакции (неявный режим)
Транзакция, изменяющая данные в связанных таблицах
Вложенные транзакции
Вкладывать можно только явные транзакции. Поэтому концепция вложенных транзакций не реализована в Oracle, где определены только автономные транзакции.
В SQL Server транзакции можно вкладывать друг в друга (потенциально до бесконечности), причем каждая дочерняя транзакция знает о существовании родительской.
Вложенные транзакции используются для наглядности кода. При подтверждении внутренней транзакции ничего в БД не фиксируется – все изменения подтверждает только внешняя инструкция COMMIT, остальные только уменьшают значение счетчика транзакций.
Переменные, используемые при работе с транзакциями
Количество ожидающих транзакций можно проверить с помощью переменной (функции) @@TRANCOUNT.
Переменная @@TRANCOUNT – количество вложенных запущенных на выполнение и не подтвержденных или отмененных в данном соединении с сервером транзакций. Значение, большее 1, означает, что выполняется транзакция , являющаяся внутренней для главной транзакции.
Переменная @@ERROR – для анализа успешности выполнения операторов обращения к БД. При успешном выполнении оператора имеет значение 0. Очищается при начале выполнения любого другого оператора.
Изменение @@TRANCOUNT при фиксации
Каждый оператор BEGIN TRAN увеличивает число транзакций на 1. Каждый оператор COMMIT уменьшает количество транзакций на 1.