在DB2中增加一个序列两次

在DB2中增加一个序列两次,db2,sequence,Db2,Sequence,在DB2Version9.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 ----------

在DB2Version9.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.

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

好的,这是一个黑客程序,但是下面的方法很有效。。。我希望看到一个更清晰的答案,所以如果你知道的话,请发布一个答案

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.

DB2中既没有序列也没有双表,这有点复杂,但我通过在DB2V.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。您可以在不使用sequence对象的情况下执行此操作,它只会生成几行数字。我有时使用它来插入生成的测试数据行。

只是因为我在挑你的毛病,Mike:-p,这里有另一个解决方案:

VALUES NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence;
如果你把它分成两行,就像这里一样。但如果您将其作为一行执行:

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

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

schema.sequence是我需要从中提取的序列的占位符。dual是一个通用表,表示我不在乎从哪个表中选择,它实际上在其他数据库中有意义: