ROLLBACK TO SAVEPOINT#

ROLLBACK TO SAVEPOINT

ROLLBACK TO SAVEPOINT

ROLLBACK TO SAVEPOINT — откатиться к точке сохранения

Синтаксис

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

Описание

Откатить все команды, которые были выполнены после установки точки сохранения. Точка сохранения остается действительной и может быть откачена позже, если это необходимо.

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

Параметры

savepoint_name

Точка сохранения, к которой нужно откатиться.

Примечания

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

Указание имени точки сохранения, которая не была установлена, является ошибкой.

Курсоры имеют несколько неконсистентное поведение в отношении сохранения точек сохранения. Любой курсор, открытый внутри точки сохранения, будет закрыт при откате точки сохранения. Если ранее открытый курсор затрагивается командой FETCH или MOVE внутри точки сохранения, которая позже откатывается, курсор остается в позиции, на которую указывает 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 обязательно, но Tantor SE и Oracle позволяют его опустить. В SQL допускается только ключевое слово WORK, а не TRANSACTION, после ключевого слова ROLLBACK. Кроме того, в SQL есть необязательная фраза AND [ NO ] CHAIN, которая в настоящее время не поддерживается в Tantor SE. В остальном, эта команда соответствует стандарту SQL.