RELEASE SAVEPOINT

RELEASE SAVEPOINT — высвободить ранее определенную точку сохранения


Синтаксис

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

Описание

Команда RELEASE SAVEPOINT высвобождает указанную точку сохранения и все активные точки сохранения, созданные после нее, и освобождает занимаемые ими ресурсы. Все изменения, сделанные после создания этой точки сохранения, но не откатившиеся, объединяются в транзакцию или точку сохранения, которая была активна на момент создания указанной точки сохранения. Изменения, сделанные после RELEASE SAVEPOINT, тоже войдут в эту активную транзакцию или точку сохранения.


Параметры

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

Имя высвобождаемой точки сохранения.


Примечания

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

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

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


Примеры

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

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

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

Более сложный пример с несколькими вложенными субтранзакциями:

BEGIN;
    INSERT INTO table1 VALUES (1);
    SAVEPOINT sp1;
    INSERT INTO table1 VALUES (2);
    SAVEPOINT sp2;
    INSERT INTO table1 VALUES (3);
    RELEASE SAVEPOINT sp2;
    INSERT INTO table1 VALUES (4))); -- генерирует ошибку

В этом примере приложение запрашивает высвобождение точки сохранения sp2, добавившей 3. Это меняет контекст транзакции добавления на sp1. Когда оператор, пытающийся добавить значение 4, генерирует ошибку, добавление 2 и 4 теряется, поскольку они находятся в одной, теперь откатившейся, точке сохранения, а значение 3 находится в том же транзакционном контексте. Теперь приложение может выбрать только одну из этих двух команд, поскольку все остальные команды будут игнорироваться:

   ROLLBACK;
   ROLLBACK TO SAVEPOINT sp1;

Если выбрать ROLLBACK, все изменения будут отменены, включая значение 1, тогда как вариант ROLLBACK TO SAVEPOINT sp1 сохранить значение 1 и позволит транзакции продолжиться.


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

Эта команда соответствует стандарту SQL. Стандарт указывает, что ключевое слово SAVEPOINT является обязательным, но QHB позволяет его опустить.


См. также

BEGIN, COMMIT, ROLLBACK, ROLLBACK TO SAVEPOINT, SAVEPOINT