Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция SAVEPOINT

Эта команда разделяет транзакцию на логические точки сохранения. В одной транзакции может быть несколько точек сохранения. Главное преимущество команды SAVE-POINT состоит в том, что транзакции можно откатывать частично, к точке сохранения, используя инструкцию ROLLBACK.


Синтаксис SQL 2003

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


Ключевые слова

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

В текущей транзакции устанавливается точка сохранения с именем имя_точки_сохранения.

Некоторые производители позволяют использовать в транзакции точки сохранения с одинаковыми именами, но стандарт ANSI так делать не рекомендует.

Стандарт SQL 2003 поддерживает инструкцию RELEASE SAVEPOINT имя_точки сохранения, которая позволяет удалить существующую точку сохранения. За дополнительной информацией об удалении существующих точек сохранения обращайтесь к разделу «Инструкция RELEASE SAVEPOINT».


Общие правила

Точки сохранения устанавливаются в пределах транзакции, в которой они определены. Имена точек сохранения должны быть уникальными в этих пределах. Используйте инструкции BEGIN и COMMIT осторожно, поскольку, если вы случайно поставите инструкцию BEGIN слишком рано или COMMIT- слишком поздно, это может сильно повлиять на то, как транзакции будут записываться в базу данных. Обязательно выбирайте для точек сохранения понятные имена, поскольку вы будете позже ссылаться на них в своих программах.


Советы и хитрости программирования

Как правило, повторное использование имени точки сохранения не приведет к ошибке или выводу предупреждения. Дублирование имени приведет к тому, что предыдущая точка сохранения с таким именем окажется неработоспособной. Будьте внимательны при выборе имен для точек сохранения!

При запуске транзакции тратятся ресурсы (а именно блокировки), обеспечивающие транзакционную целостность. Ваша транзакция должна как можно быстрее завершиться, чтобы блокировки были сняты и другие пользователи могли использовать ресурсы.


DB2

Платформа DB2 поддерживает усовершенствованную версию инструкции SAVEPOINT по сравнению с той, которая определяется стандартом ANSI.

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

ON ROLLBACK RETAIN CURSORS [ON ROLLBACK RETAIN LOCKS]

Где:

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

В текущей транзакции устанавливается точка сохранения с именем имя_точки сохранения.

UNIQUE

Предложение показывает, что точка сохранения должна быть уникальной и что это имя нельзя использовать повторно или изменять (поддерживается только DB2 для OS/390).

ON ROLLBA СК RETAIN CURSORS

Указывает, что открытые курсоры остаются открытыми при возврате к точке сохранения. (Дополнительная информация приводится в разделе «Инструкция ROLLBACKS.)

ON ROLLBA СК RETAIN LOCKS

Указывает, что блокировки сохраняются при возврате к точке сохранения. Это предложение используется по умолчанию. (Дополнительная информация приводится в разделе «Инструкция ROLLBACK».)

Нужно отметить, что в DB2 точки сохранения не могут быть вложенными. Если точка сохранения создается в тот момент, когда активна другая точка, возникает ошибка.

Платформа DB2 неявно удаляет все точки сохранения в транзакции после ее фиксирования.

В следующем примере мы устанавливаем точку сохранения salesprocessing без явного сохранения блокировок.

SAVEPOINT sales_processing ON ROLLBACK RETAIN CURSORS;

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

SAVEPOINT sales_processing ON ROLLBACK RETAIN CURSORS ON ROLLBACK RETAIN LOCKS;


MySQL

He поддерживается.


Oracle

Платформа Oracle полностью поддерживает реализацию стандарта ANSI.

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

В следующем примере производится несколько модификаций данных, после чего выполняется откат к точке сохранения.

INSERT INTO sales
VALUES (7896′, ‘JR3435’, ‘Oct 28 1997’, 25, ‘Net 60’, ‘BU7832′);

SAVEPOINT after_insert;

UPDATE sales SET terms=’Net 90′
WHERE sales_id=’7896’;

SAVEPOINT after_update;

DELETE sales;

ROLLBACK TO after_insert;


PostgreSQL

He поддерживается.


SQL Server

Платформа SQL Server не поддерживает команду SAVEPOINT. Вместо нее используется команда SAVE.

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

Кроме того, вместо объявления постоянного имени точки сохранения вы при желании можете сослаться на переменную, содержащую это имя. Если вы используете переменную, то она должна относиться к типу CHAR, VARCHAR, NCHAR или NVARCHAR.

Платформа SQL Server позволяет устанавливать в одной транзакции несколько точек сохранения. Тем не менее будьте осторожны. Из-за того, что SQL Server поддерживает несколько точек сохранения в одной транзакции, может показаться, что SQL Server полностью поддерживает вложенные точки сохранения. На самом деле такие точки не поддерживаются. При каждом выполнении в SQL Server команды для фиксирования транзакции или создания точки сохранения фиксирование результатов или откат происходит к последней, открытой точке сохранения.

При выполнении команды ROLLBACK TRAN имя_точки_сохранения SQL Server выполняет откат транзакции к указанной точке сохранения, а затем продолжает обработку со следующей допустимой команды Transact-SQL, стоящей после инструкции ROLLBACK. И, наконец, транзакция должна завершаться инструкцией COMMIT или последней инструкцией ROLLBACK.

Источник