Получение CURRVAL и NEXTVAL в одном запросе

Используя SQLPlus, я создал следующую последовательность:

CREATE SEQUENCE pubnum_seq
START WITH 7
    INCREMENT BY 2
MAXVALUE 1000;

То, что я хочу сделать, это написать один запрос, который получает как NEXTVAL, так и CURRVAL в последовательности. Кажется, это должно быть достаточно просто. Я попробовал следующее утверждение:

SELECT pubnum_seq.currval, pubnum_seq.nextval
FROM dual;

Однако это возвращает одно и то же значение для обоих.

CURRVAL - 7
NEXTVAL - 7

Если я попробую утверждения отдельно, то это даст мне то, что я хочу, но я не уверен, как это сделать в одном запросе.

2 ответа

Что ж, после поиска документов в Oracle, я предполагаю, что мое утверждение в конце концов верно. Согласно этой странице документов:

Если оператор содержит ссылки как на CURRVAL, так и на NEXTVAL, Oracle увеличивает последовательность и возвращает одно и то же значение как для CURRVAL, так и для NEXTVAL, независимо от их порядка в операторе.

Для Oracle не имеет смысла делать это, но я поверю на слово.

У меня такая же проблема. После долгих исследований мы сделали два отдельных запроса.

Первый проверяет текущее значение, а второй генерирует новое.

Кажется, что база данных замечает "nextval" в операторе SELECT и немедленно заменяет "старое" текущее значение.

Другие вопросы по тегам