CURRVAL в Oracle SQL. Введение
Oracle предоставляет два оператора для работы с последовательностями:
NEXTVAL— генерирует новое значениеCURRVAL— возвращает текущее значение, уже полученное черезNEXTVAL
Оператор CURRVAL особенно полезен, когда:
Нужно использовать значение, уже вставленное в таблицу
Нужно сохранить ссылку на последний вставленный ID
Необходимо избежать повторного увеличения счётчика
🔤 Написание
💡 Но: CURRVAL можно использовать только после вызова NEXTVAL в рамках текущей сессии, иначе будет ошибка.
🔄 Где часто используется
Сразу после вставки строки с
NEXTVALПри вставке в связанные таблицы (master-detail)
В PL/SQL для повторного использования значения
В логике транзакций, где нужно одно значение для нескольких действий
🧪 10 Примеров использования CURRVAL с пояснениями
1️⃣ КУРВАЛЛ + CURRVAL в одной транзакции
Сначала генерируем ID, потом используем его повторно.
2️⃣ КУРВАЛЛ в SELECT после NEXTVAL
Получаем последнее значение, вызванное ранее.
3️⃣ КУРВАЛЛ без NEXTVAL — ошибка
Нельзя вызывать CURRVAL до NEXTVAL.
4️⃣ Вставка в связанную таблицу
Сохраняем связь между главной и дочерней таблицей.
5️⃣ КУРВАЛЛ в PL/SQL переменной
Сохраняем значение CURRVAL в переменную.
6️⃣ КУРВАЛЛ после вызова NEXTVAL внутри блока
Выводим ID, присвоенный новой записи.
7️⃣ Вставка и логгирование с КУРВАЛЛ
Используем ID клиента для записи в журнал.
8️⃣ КУРВАЛЛ внутри функции
Оборачиваем CURRVAL в функцию.
9️⃣ КУРВАЛЛ в MERGE для дочерних строк
Используем CURRVAL после MERGE + INSERT.
🔟 КУРВАЛЛ + пакетная вставка
Каждая итерация имеет собственное значение CURRVAL.
🧩 Заключение
Оператор CURRVAL в Oracle SQL позволяет безопасно и удобно повторно использовать уже сгенерированное значение из последовательности, не вызывая её повторно. Это упрощает вставку данных и логирование.
💡 Запомни:
CURRVALвсегда зависит от вызоваNEXTVALв текущей сессииВызывает ошибку, если
NEXTVALне был вызванУдобен для использования в связанных таблицах и логах
Работает в SQL и в PL/SQL