2017-12-25 11 views
1

HSQLDB에서 시퀀스의 카운터를 N으로 올리려고합니다. N> 1 일 때 수행하는 방법의 예를 찾을 수 없으므로 호출을 시도했습니다 NEXT VALUE FOR my_sequence N 시간 그러나, 그것은 또한 운동하지 않았다. 예를 들어HSQLDB : 시퀀스의 카운터를 N으로 올리기

:

DROP PROCEDURE IF EXISTS my_procedure; 
CREATE PROCEDURE my_procedure(OUT my_output INTEGER, OUT out_a_1 INTEGER, OUT out_a_2 INTEGER, OUT out_a_3 INTEGER, IN my_input INTEGER) 
     MODIFIES SQL DATA -- NO SQL 
     BEGIN ATOMIC 

       DECLARE a_1 BIGINT; 
       DECLARE a_2 BIGINT; 
       DECLARE a_3 BIGINT; 

       SET my_output = my_input; 

       SET a_1 = NEXT VALUE FOR my_sequence; 
       SET a_2 = NEXT VALUE FOR my_sequence; 
       SET a_3 = NEXT VALUE FOR my_sequence; 

       SET out_a_1 = a_1; 
       SET out_a_2 = a_2; 
       SET out_a_3 = a_3; 
     END; 

결과 : 카운터를 1 만 발생되도록 out_a_1 == out_a_2 == out_a_3

는 한 번의 동작에 의해 N 카운터를 마련 할 수 있는가?

그렇지 않은 경우 어떻게해야합니까?

답변

1

테이블에 시퀀스 값을 삽입해야합니다. 각 행 삽입은 시퀀스를 증가시킵니다.

DECLARE TABLE T (ID INT) 
INSERT INTO T VALUES (NEXT VALUE FOR my_sequence), (NEXT VALUE FOR my_sequence) 

위 예제는 시퀀스를 2 씩 증가시키는 데 사용할 수 있습니다.

+0

감사합니다. 나는 그런 식으로 일을 끝내었다. 다행히 이것이 의도 된 방법임을 확인할 수있어서 기쁩니다. – rapt

+0

BTW, 나는 연속적인 'NEXT VALUE' 호출을 원자 적으로 (예 : 프로 시저에서) 호출하지 않는 한 두 명의 사용자/세션이 동일한 값을 얻는 문제가있을 수 있다고 읽었습니다. 이'INSERT'에 그런 문제가 있습니까? 또한,'BIGINT' 시퀀스를 생성하지 않습니까? – rapt

+0

세션은 다른 세션에서 반환 된 값과 동일한 값을 반환하지 않습니다. Atomicity는 컨텍스트에 관계없이 시행됩니다. – fredt