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 카운터를 마련 할 수 있는가?
그렇지 않은 경우 어떻게해야합니까?
감사합니다. 나는 그런 식으로 일을 끝내었다. 다행히 이것이 의도 된 방법임을 확인할 수있어서 기쁩니다. – rapt
BTW, 나는 연속적인 'NEXT VALUE' 호출을 원자 적으로 (예 : 프로 시저에서) 호출하지 않는 한 두 명의 사용자/세션이 동일한 값을 얻는 문제가있을 수 있다고 읽었습니다. 이'INSERT'에 그런 문제가 있습니까? 또한,'BIGINT' 시퀀스를 생성하지 않습니까? – rapt
세션은 다른 세션에서 반환 된 값과 동일한 값을 반환하지 않습니다. Atomicity는 컨텍스트에 관계없이 시행됩니다. – fredt