2

我需要在 DB2(9.1 版)中两次获取序列的下一个值。而不是执行以下两次:

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.

我是被迫只查询两次,还是有办法在一次查询中将其增加两次?

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

好的,这是一个 hack,但以下工作......虽然我希望看到一个更清晰的答案,所以如果你知道一个答案,请发布一个答案!

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

仅仅因为我选择了你 Mike :-P,这是另一个解决方案:

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

如果您将其分为两行,它将起作用,就像这里一样。但是,如果您将其作为一行进行:

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

它将返回相同的序列值。:-(

于 2010-02-05T00:11:29.803 回答