2

DB2(バージョン9.1)でシーケンスの次の値を2回取得する必要があります。以下を2回実行するのではなく:

SELECT nextval FOR schema.sequence AS id
FROM dual

私は次のようなことをしたいと思います:

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

上記を除いて、それを一度だけインクリメントします:

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

  1 record(s) selected.

2回だけクエリを実行する必要がありますか、それとも1回のクエリで2回インクリメントする方法はありますか?

4

4 に答える 4

6

これは少し複雑ですが、機能します(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です。シーケンスオブジェクトなしでそれを行うことができ、それは数行の数字を生成するだけです。これを使用して、生成されたテストデータの行を挿入することがあります。

于 2010-02-02T19:30:25.600 に答える
0

わかりました、それはハックですが、次のように機能します...しかし、私はよりクリーンな答えを見たいので、もし知っているなら答えを投稿してください!

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.
于 2009-04-28T20:56:57.887 に答える
0

DB2にはシーケンスもデュアルテーブルもありません

于 2009-11-03T22:05:20.167 に答える
0

私があなたを選んでいるという理由だけでマイク:-P、ここに別の解決策があります:

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

ここのように、2行で実行すると機能します。ただし、1行で実行する場合:

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

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

于 2010-02-05T00:11:29.803 に答える