ROLLBACK TO SAVEPOINT

Откатывает текущую транзакцию до указанной контрольной точки.

Синтаксис

ROLLBACK [WORK | TRANSACTION] TO [SAVEPOINT]
                savepoint_name

Описание

Эта команда откатывает все команды, выполненные после установки контрольной точки. Сама контрольная точка остаётся действительной и может быть использована для последующего отката при необходимости.

ROLLBACK TO SAVEPOINT неявно уничтожает все контрольные точки, созданные после указанной.

Параметры

WORK

TRANSACTION

  • Необязательные ключевые слова. Не оказывают влияния на выполнение команды.

savepoint_name

  • Имя контрольной точки, до которой необходимо выполнить откат.

Примечание

Используйте команду RELEASE SAVEPOINT, чтобы удалить контрольную точку без отмены эффекта команд, выполненных после её создания.

Недопустимо указывать имя контрольной точки, которая ещё не была создана.

Курсоры проявляют определённое поведение, не связанное с транзакциями, по отношению к контрольным точкам. При откате до контрольной точки все курсоры, открытые внутри этой контрольной точки, закрываются. Если ранее открытый курсор был затронут командой FETCH в пределах контрольной точки, а затем выполняется откат до этой контрольной точки, курсор останется в позиции, установленной командой FETCH (то есть перемещение курсора, вызванное FETCH, не откатывается). Закрытие курсора не отменяется при откате. Однако если в ходе выполнения запроса курсора в пределах контрольной точки возникли побочные эффекты (например, вызовы изменяемых функций), то при откате такие побочные эффекты также будут отменены. Поскольку выполнение курсора привело к прерыванию транзакции, он переходит в состояние, при котором его нельзя выполнять повторно; хотя транзакцию можно восстановить с помощью ROLLBACK TO SAVEPOINT, сам курсор больше использоваться не может.

Пример

Отмена эффекта команд, выполненных после создания my_savepoint:

ROLLBACK TO SAVEPOINT my_savepoint;

Положение курсора не изменяется при откате до контрольной точки:

BEGIN;
DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;
SAVEPOINT foo;
FETCH 1 FROM foo;
column
----------
        1
ROLLBACK TO SAVEPOINT foo;
FETCH 1 FROM foo;
column
----------
        2
COMMIT;

Совместимость

Стандарт SQL требует указания ключевого слова SAVEPOINT, однако база данных YMatrix (как и Oracle) позволяет его опускать. В стандарте SQL после ROLLBACK разрешается использовать только ключевое слово WORK, а TRANSACTION как дополнительное слово не допускается. Кроме того, стандарт SQL предусматривает необязательный параметр AND [NO] CHAIN, который в настоящее время не поддерживается в базе данных YMatrix. Во всех остальных аспектах данная команда соответствует требованиям SQL.

Смотрите также

BEGIN, SAVEPOINT, RELEASE SAVEPOINT, COMMIT