在DB2中增加一个序列两次
在DB2Version9.1中,我需要两次获取序列的下一个值。而不是执行以下两次:在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 ----------
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是一个通用表,表示我不在乎从哪个表中选择,它实际上在其他数据库中有意义: