RELEASE SAVEPOINT#

RELEASE SAVEPOINT

RELEASE SAVEPOINT

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

Синтаксис

RELEASE [ SAVEPOINT ] savepoint_name

Описание

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

Параметры

savepoint_name

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

Примечания

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

Невозможно освободить точку сохранения, когда транзакция находится в состоянии прерывания; для этого используйте 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))); -- generates an error

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

   ROLLBACK;
   ROLLBACK TO SAVEPOINT sp1;

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

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

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