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
ところで、シーケンスを使って、連続する 'NEXT VALUE'呼び出しをアトミック(例:プロシージャ内で)にしない限り、2人のユーザー/セッションが同じ値を取得するという問題があるかもしれません。この 'INSERT'にはこのような問題はありませんか?また、シーケンスは 'BIGINT'を作成しませんか? – rapt
セッションは、別のセッションによって返された同じ値を返すことはありません。 Atomicityはコンテキストに関係なく強制されます。 – fredt