2013-06-21 2 views
3

NEXTVAL 번 호출하여 반환 값을 여러 번 사용하고 싶습니다. 그러나 그것은 작동하지 않습니다.PostgreSQL nextval 및 currval이 동일한 쿼리

SELECT NEXTVAL('seq_name'), NEXTVAL('seq_name'); 

위 (11) (12) (I 다시도 11 및도 11을 원)을 수득한다 :

seq_name 지금 10 인 시퀀스 ( 질의하지 나열된 순서에서 독립적으로 수행된다)을 가정한다.

SELECT NEXTVAL('seq_name'), CURRVAL('seq_name'); 
SELECT NEXTVAL('seq_name'), LASTVAL(); 

위는 11, 10 또는NEXTVAL가 현재 세션에서 호출 적이 없다는 오류를 줄 줄 것이다. [나는 오류가 발생하는 이유 : 알]

재사용 (이 경우 11) 같은 증가 값을 얻을 수있는 동일한 SQL 문에 NEXTVALCURRVAL를 사용하는 방법이 있나요? 또는이 문제에 대한 간단한 해결책?

답변

4

가능한 용액 여기

SELECT nextval nextval1, nextval nextval2 
    FROM 
(
    SELECT NEXTVAL('seq_name') nextval 
) q 

SQLFiddle 데모이다.

UPDATE가 어떻게`INSERT() 값에 대한 대신 INSERT INTO ... VALUES 사용 INSERT INTO ... SELECT

INSERT INTO Table1 (col1, col2, col3, col4, ...) 
SELECT nextval, nextval, 5, 'Text value', ... 
    FROM 
(
    SELECT NEXTVAL('seq_name') nextval 
) q 
+1

의 삽입하려면()'구축? 그러한 삽입 문에 필요하기 때문에보다 일반적인 해결책이 적절할 것입니다. 귀하의 솔루션은 SELECT 문에 너무 한정적입니다. – ADTC

+0

업데이트 된 답변보기 – peterm

+0

감사합니다. 좋은 답변입니다.하지만 정말로 _really_ *** 정말로 *** INSERT VALUES 구문을 고수해야합니까? : D – ADTC