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