Как было показано оператор ROLLBACK отменяет всю транзакцию. Однако с помощью команды SAVEPOINT (точка сохранения) можно отменить лишь часть транзакции. Синтаксис оператора SAVEPOINT: SAVEPOINT имя;
где имя — это имя точки сохранения. Синтаксис имен точек сохранения подчиняется обычным правилам, установленным для идентификаторов SQL (см. главу 3). Обратите внимание, что точки сохранения не описываются в разделе объявлений, так как они являются глобальными для всей транзакции, а она может продолжаться и после окончания блока. После того как точка сохранения создана, можно осуществлять откат программы к этой точке следующим образом:
ROLLBACK [WORK] TO SAVEPOINT имя;
При выполнении оператора ROLLBACK TO SAVEPOINT происходит следующее:
Вся работа, произведенная после этой точки сохранения, отменяется. Однако точка сохранения остается активной. При желании откат можно повторить.
Все блокировки, установленные SQL-операторами после точки сохранения, снимаются, и освобождаются ресурсы, запрошенные SQL-операторами после этой точки.
Транзакция не заканчивается, так как SQL-операторы находятся в состоянии ожидания.
Рассмотрим фрагмент блока PL/SQL:
Если вместо комментария вставить
Г] ROLLBACK TO В;
то третий оператор INSERT и точка сохранения С будут отменены. Однако первые два оператора INSERT будут обработаны. Если же вместо комментария вставить
будут отменены второй и третий операторы INSERT и останется только первый.
Команда SAVEPOINT часто используется перед сложным фрагментом транзакции. Если эта часть транзакции выполняется неуспешно, ее можно откатить, что позволит продолжить выполнение предшествующей части.
< Предыдущая | Следующая > |
---|