SAVEPOINT в Oracle SQL. Введение
Представьте, что вы проводите серию изменений в таблицах, и хотите иметь возможность отменить часть этих изменений, не откатывая всё.
Именно для этого предназначен SAVEPOINT — он фиксирует внутреннюю метку в транзакции, к которой можно откатиться с помощью ROLLBACK TO.
🔄 Это особенно полезно в сложных процедурах, циклах и обработке ошибок.
🔤 Написание
🧮 Пример:
🔄 Где часто используется
Многошаговые операции, где нужно контроль за этапами
Циклическая обработка (например, массовые загрузки)
Частичный откат в процедуре или PL/SQL блоке
Тестирование бизнес-логики с шагами
Верификация данных перед
COMMIT
🧪 10 Примеров использования с пояснениями
1️⃣ Создание точки и возврат к ней
Обновление отменяется, остальное — остаётся.
2️⃣ Несколько SAVEPOINT в одной транзакции
Оба действия будут отменены.
3️⃣ Откат только к последнему SAVEPOINT
table2 вернётся, table1 — останется.
4️⃣ Работа в PL/SQL блоке с логикой
Откатим вставку по условию.
5️⃣ Использование в цикле
Откат для конкретной строки, не всей сессии.
6️⃣ SAVEPOINT + COMMIT
После COMMIT все точки сбрасываются.
7️⃣ Переиспользование имени SAVEPOINT
Важно: имя SAVEPOINT перезаписывается.
8️⃣ Проверка поведения после ROLLBACK TO
Запись (1) останется в транзакции.
9️⃣ Ошибка при неверной точке
Точка должна существовать в текущей сессии и до COMMIT.
🔟 Сложная логика с несколькими действиями
Удаление сохраняется, обновление — отменяется.
🧩 Заключение
SAVEPOINT — мощный механизм, позволяющий контролировать ход транзакции на каждом этапе. Он особенно полезен в сценариях, где нужен частичный откат или обработка ошибок. Используя SAVEPOINT и ROLLBACK TO, вы получаете гибкий и надёжный контроль над данными.
💡 Запомни:
SAVEPOINTсоздаёт метку внутри транзакцииROLLBACK TOвозвращает к ней, не отменяя всёПосле
COMMITвсе точки теряютсяПоддерживает сложную логику в PL/SQL