在DB2中增加一次序列两次

时间:2009-04-28 19:14:50

标签: db2 sequence

我需要在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.

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

4 个答案:

答案 0 :(得分: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。你可以在没有序列对象的情况下完成它,它只会生成几行数字。我有时会使用它来插入生成的测试数据行。

答案 1 :(得分: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.

答案 2 :(得分:0)

DB2中没有序列也没有双表

答案 3 :(得分:0)

因为我正在挑剔你迈克:-P,这是另一个解决方案:

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

如果您将其作为两行(如此处)执行,它将起作用。但如果你把它作为一行:

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

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