Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

ROLLBACK TO SAVEPOINT

Откатывает текущую транзакцию к точке сохранения.

Синтаксис

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] <savepoint_name>

Описание

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

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

Параметры

Параметр Описание

WORK

TRANSACTION

Необязательные ключевые слова, не оказывают никакого влияния

savepoint_name

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

Примечания

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

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

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

См. также