Получение 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 и немедленно заменяет "старое" текущее значение.