我需要在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次查询中将其递增两次?
答案 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);
它将返回相同的序列值。 : - (