2010-02-26 3 views
18

TEST_SEQ라는 시퀀스가 ​​있다고 가정하면 다음 값을 선택하는 올바른 방법은 무엇입니까? 이 작동하지 않습니다HSQLDB 2.0.0-rc8에서 다음 시퀀스 값을 선택하는 "올바른"방법

select next value for TEST_SEQ

를 아마 그것은 "FROM"절을 기대하고 있기 때문이다. 최대 절전 모드에서 HSQLDialect.getSequenceNextValString()보고 나는이 참조 : 2.0.0-RC8 작동하지 않습니다

select next value for TEST_SEQ from dual_TEST_SEQ

(I : 내 경우 같은 초래

"select next value for " + sequenceName + " from dual_" + sequenceName

단지이 2.0 이전 버전에서 작동 가정 - havent 한 검증) 나는이 (오라클 스타일을 작동하는 경우 DUAL라고 1 행과 간단한 테이블) 만드는 작업이 포함됩니다 솔루션 건너했습니다

select next value for TEST_SEQ from DUAL

하지만 hsqldb는이 테이블을 기본적으로 제공하지 않으며 "첫 부팅"에서 이러한 테이블을 생성하는 최대 절전 모드를 얻을 수있는 방법을 모르겠습니다.

내가 생각하기에 상자 밖의 순서에 대해 다음 값을 얻는 방법이 있어야하며 그냥 누락 된 것입니다. 아이디어가 있습니까?

답변

23

TEST_SEQ라는 시퀀스가 ​​있다고 가정하고 다음 값을 선택하는 올바른 방법은 무엇입니까?

documentation 말한다 동안 :

시퀀스의 다음 값은 SELECT에 포함 할 수

, 다음 예제와 같이 INSERT 및 UPDATE 문 :

SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>; 

은 " 올바른 "방식 (왜냐하면 HSQLDB에는없는 멍청한 DUAL 테이블과 같은 테이블을 포함하지 않기 때문에 더 간단합니다)은 다음과 같습니다 :

이는 1.7.2 등장이 그의 실제 최대 절전 모드 최대 절전 모드 코어의 "최신"버전의 HSQLDialect의 순서를 처리하는 방법 ( HHH-2839 참조).

그리고 실제로, 이것은 내가에 무엇을보고있는 HSQLDialecthibernate-core-3.3.0.SP1.jar의 :

public String getSequenceNextValString(String sequenceName) { 
    return "call next value for " + sequenceName; 
} 

그래서 내 조언입니다 : 최대 절전 모드의 최신 버전으로 업그레이드, 당신은 매우 가능성이 최대 절전 모드 코어 3.2.5 또는 이전을 사용하는 .

+0

@ hatchetman82 안녕하세요. BTW : 좋은 대답을 인식하는 일반적인 방법은 그것을 upvoting입니다;) –

+1

@ hatchetman82 아무 문제 없습니다. 그것은 당신이 좋은 대답 (당신이 그것을 받아들이면 매우 가능성이 높습니다)로 대답을 고려한다면, 그것은 그것을 IMO upvote 의미가,이게 어떻게 작동하는지입니다. –

+0

안녕하세요. 관련성이 있습니다. 나는 아파치의 DdlUtils를 사용하여 시작시이 XML을 id :''column name = "id"type = "INTEGER"required = "true"primaryKey = "true"/>'에 사용하여 데이터베이스를 생성한다. 객체를 삽입 할 때 새로운 키 값을 얻으려면 어떻게해야합니까? 나는 또한 iBatis를 사용하고있다. –

2

당신은

SET DATABASE SQL SYNTAX PGS

는 당신은 또한 http://hsqldb.org/doc/guide/dbproperties-chapt.html

select nextval('sequence_name') 같은 표준 포스트 그레스 구문을 사용하여 조회 할 수 있습니다 (PGS는 포스트 그레스 위해 서) 실행주의 분명히 경우 그 한 번이 전형적인 HSQLDB를 할 경우 call NEXT VALUE FOR SEQUENCE_NAME과 같은 시퀀스는 더 이상 작동하지 않습니다.

관련 문제