2009-04-28 8 views
2

DB2(バージョン9.1)でシーケンスの次の値を2回取得する必要があります。上記は一度だけ、それをインクリメント除きDB2でシーケンスを2回インクリメント

SELECT nextval FOR schema.sequence AS id1, 
     nextval FOR schema.sequence AS id2 
FROM dual 

ID1   ID2   
----------- ----------- 
     643   643 

    1 record(s) selected. 

は、私はちょうどクエリに強制アムむしろ二倍以下の実行より:

SELECT nextval FOR schema.sequence AS id 
FROM dual 

を私のような何かをしたいと思います2回、または1つのクエリで2回インクリメントする方法はありますか?

答えて

6

にはシーケンスやデュアルテーブルこれはAA少し複雑ですが、それは(私はDB2 Vにそれを実行することにより、検証の作品はありません。 9)。

WITH GENERATED (KEYVAL) AS 
(select 1 
    from sysibm.sysdummy1 
    UNION ALL 
SELECT KEYVAL + 1 
    FROM GENERATED 
    WHERE KEYVAL < 2)  -- how many you want 

SELECT KEYVAL AS INCREMENT_NUMBER, NEXTVAL FOR schema.sequence 
    FROM GENERATED; 

これは私の好きなコードの一部です。再帰的なSQLです。あなたはシーケンスオブジェクトなしでそれを行うことができ、数行の行を生成するだけです。私は時々生成されたテストデータの行を挿入するためにこれを使用します。あなたはここのように、2行としてそれを行う場合

VALUES NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence; 

それは動作します:私はマイク:-Pあなたに選んだという理由だけで

0

[OK]を、それはハックですが、次の作品...私はクリーナーの回答を見ることが大好きですので、あなたが1つを知っている場合は、回答を投稿してください!で結果

SELECT nextval FOR schema.sequence AS id 
FROM (SELECT 1 FROM dual UNION ALL SELECT 1 FROM dual) temp 

ID   
----------- 
     669 
     670 

    2 record(s) selected. 
0

DB2

+1

schema.sequenceは、私が引き出す必要があるシーケンスのプレースホルダーであることを意図していました。デュアルは、私が選択しているテーブルを気にしないことを示す一般的なテーブルです。他のデータベースでの意味:http://en.wikipedia.org/wiki/DUAL_table –

0

は、ここでは別のソリューションです。しかし、あなたが1つの行としてそれを行うならば:

VALUES (NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence); 

それは同じシーケンス値を返します。 :-(