ROLLBACK TO SAVEPOINT

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

Синтаксис

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] имя_точки_сохранения

Описание

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

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

Параметры

имя_точки_сохранения

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

Примечания

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

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

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT