Я надеялся позвонить NEXTVAL
один раз и использовать возвращаемые значения несколько раз. Однако это не сработает.PostgreSQL nextval и currval в одном запросе
Пусть последовательность seq_name
находится в 10 сейчас (запросы выполняются независимо друг от друга, а не в указанном порядке):
SELECT NEXTVAL('seq_name'), NEXTVAL('seq_name');
выше даст 11, 12 (я хочу, 11 и 11 раз).
SELECT NEXTVAL('seq_name'), CURRVAL('seq_name');
SELECT NEXTVAL('seq_name'), LASTVAL();
выше даст 11, 10 ИЛИ выдаст ошибку, что NEXTVAL
никогда не был вызван в текущей сессии. [Я знаю, почему происходит ошибка :)]
Есть ли способ использовать NEXTVAL
и CURRVAL
в одном операторе SQL, чтобы получить то же измененное значение (11 в данном случае) для повторного использования? Или простое решение этой проблемы?
Как насчет 'INSERT() VALUES()' построить? Мне нужно это для такого выражения вставки, поэтому более общее решение было бы подходящим. Ваше решение слишком специфично для операторов SELECT. – ADTC
См. Обновленный ответ – peterm
Спасибо, хороший ответ, но что, если я действительно _really_ *** действительно *** должен придерживаться конструкции INSERT VALUES? : D – ADTC