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