SAVEPOINT

SAVEPOINT — определить новую точку сохранения в текущей транзакции

Синтаксис

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

Описание

Команда SAVEPOINT устанавливает новую точку сохранения в текущей транзакции.

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

Параметры

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

Имя, присваиваемое новой точке сохранения.

Примечания

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

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

Примеры

Установка точки сохранения с последующей отменой действий всех команд, выполненных после ее создания:

BEGIN;
  INSERT INTO table1 VALUES (1);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (2);
    ROLLBACK TO SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (3);
COMMIT;

Вышеуказанная транзакция добавит в таблицу значения 1 и 3, но не 2.

Установка и последующее уничтожение точки сохранения:

BEGIN;
    INSERT INTO table1 VALUES (3);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (4);
    RELEASE SAVEPOINT my_savepoint;
COMMIT;

Данная транзакция добавит значения 3 и 4.

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

Стандарт SQL требует, чтобы точка сохранения уничтожалась автоматически при установке другой точки сохранения с тем же именем. В QHB сохраняется и старая точка сохранения, хотя при откате и освобождении будет использоваться только самая последняя точка. (Освобождение новой точки сохранения с помощью RELEASE SAVEPOINT приведет к тому, что старая точка сохранения снова станет доступной для команд ROLLBACK TO SAVEPOINT и RELEASE SAVEPOINT.) В остальном команда SAVEPOINT полностью соответствует стандарту.

См. также

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO SAVEPOINT