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 позволяет его опустить.