NEXTVAL в Oracle SQL для генерации уникальных значений

🟢NEXTVAL в Oracle SQL. Введение

В Oracle нет встроенного автоинкремента, как в некоторых других СУБД. Вместо этого используется объект SEQUENCE — специальная последовательность чисел.
Оператор NEXTVAL используется для получения следующего значения из последовательности, что удобно при генерации уникальных ID.


🔤 Написание

sql
sequence_name.NEXTVAL

📌 Это выражение можно использовать в:

  • INSERT INTO

  • SELECT

  • PL/SQL блоках


🔄 Где часто используется

  • При вставке новых строк в таблицу

  • Для генерации уникальных ключей

  • В ID-системах

  • В бизнес-правилах, где нужен контроль последовательности

  • При миграциях и импорте данных


🧪 10 Примеров использования с пояснениями

1️⃣ Получение нового значения из последовательности

sql
SELECT employees_seq.NEXTVAL FROM dual;

Выводит следующее число из последовательности.


2️⃣ Вставка с NEXTVAL

sql
INSERT INTO employees (id, name)
VALUES (employees_seq.NEXTVAL, 'Alex');

Присваиваем новый ID при добавлении записи.


3️⃣ NEXTVAL в PL/SQL переменную

sql
DECLARE
v_id NUMBER;
BEGIN
SELECT employees_seq.NEXTVAL INTO v_id FROM dual;
END;

Сохраняем значение в переменную.


4️⃣ Создание последовательности

sql
CREATE SEQUENCE employees_seq
START WITH 1
INCREMENT BY 1
NOCACHE;

Создаём новую SEQUENCE.


5️⃣ Нэкствал сразу в нескольких столбцах

sql
INSERT INTO documents (id, version, content)
VALUES (docs_seq.NEXTVAL, 1, 'Initial draft');

Создаём первую версию документа.


6️⃣ Использование NEXTVAL в SELECT

sql
SELECT 'DOC-' || docs_seq.NEXTVAL AS doc_code FROM dual;

Создаём уникальный код на основе последовательности.


7️⃣ Множественные вызовы — независимы

sql
SELECT docs_seq.NEXTVAL FROM dual;
SELECT docs_seq.NEXTVAL FROM dual;

Каждый вызов увеличивает значение.


8️⃣ NEXTVAL в цикл FOR

sql
BEGIN
FOR i IN 1..5 LOOP
INSERT INTO test_table (id, value)
VALUES (test_seq.NEXTVAL, 'Item ' || i);
END LOOP;
END;

Пять строк с уникальными ID.


9️⃣ NEXTVAL внутри MERGE

sql
MERGE INTO target t
USING source s
ON (t.id = s.id)
WHEN NOT MATCHED THEN
INSERT (id, name) VALUES (employees_seq.NEXTVAL, s.name);

Генерация ID при синхронизации данных.


🔟 NEXTVAL для внешнего ключа

sql
INSERT INTO orders (order_id, customer_id)
VALUES (orders_seq.NEXTVAL, 102);

Уникальный ID заказа + внешний ключ.


🧩 Заключение

NEXTVAL — это стандартный инструмент Oracle SQL для пошаговой генерации числовых значений. Вместе с объектом SEQUENCE он обеспечивает безопасную, быструю и масштабируемую генерацию уникальных идентификаторов.

💡 Запомни:

  • Работает только с SEQUENCE

  • Возвращает новое уникальное значение

  • Используется с dual, INSERT, PL/SQL, MERGE

  • Может вызываться многократно — каждый вызов увеличивает счётчик

  • Подходит для всех сценариев автоинкремента


🔜 Следующая статья:

INTO в Oracle SQL — как сохранять результаты SELECT-запросов в переменные в PL/SQL


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии