Sql 如何在db2中为不同行中的多个序列检索下一个值?
我正在使用这个查询Sql 如何在db2中为不同行中的多个序列检索下一个值?,sql,db2,Sql,Db2,我正在使用这个查询 SELECT NEXT VALUE FOR SEQUENCENAME1 FROM DUMMY_TABLE UNION SELECT NEXT VALUE FOR SEQUENCENAME2 FROM DUMMY_TABLE VALUES (NEXT VALUE FOR SEQUENCENAME1) , (NEXT VALUE FOR SEQUENCENAME2) 这不会产生多行的答案。 为我提供一些解决方案,因为我必须检索数千个序列的下一个值来回答您的核心问题:
SELECT NEXT VALUE FOR SEQUENCENAME1 FROM DUMMY_TABLE UNION
SELECT NEXT VALUE FOR SEQUENCENAME2 FROM DUMMY_TABLE
VALUES (NEXT VALUE FOR SEQUENCENAME1)
, (NEXT VALUE FOR SEQUENCENAME2)
这不会产生多行的答案。
为我提供一些解决方案,因为我必须检索数千个序列的下一个值来回答您的核心问题:您可以检查序列的元数据
属性/列START和NEXTCACHEFIRSTVALUE是您感兴趣的属性/列。请注意,序列值通常是为了性能而缓存的,因此您需要记住这一点。尝试使用
UNION ALL
:
SELECT NEXT VALUE FOR SEQUENCENAME1 FROM DUMMY_TABLE UNION ALL
SELECT NEXT VALUE FOR SEQUENCENAME2 FROM DUMMY_TABLE;
如果表达式返回相同的值,那么
UNION
将只返回一行——它将删除重复项。您可以使用此查询
SELECT NEXT VALUE FOR SEQUENCENAME1 FROM DUMMY_TABLE UNION
SELECT NEXT VALUE FOR SEQUENCENAME2 FROM DUMMY_TABLE
VALUES (NEXT VALUE FOR SEQUENCENAME1)
, (NEXT VALUE FOR SEQUENCENAME2)
虽然你不知道哪一行是哪一行,所以也许这个
VALUES ('SEQ1', NEXT VALUE FOR SEQUENCENAME1)
, ('SEQ2', NEXT VALUE FOR SEQUENCENAME2)
UNION
删除重复项,因此如果两个序列返回相同的值,则只能得到一行。改为尝试UNION ALL
(但是检索“数千”个序列的下一个值听起来很奇怪。您试图解决的实际问题是什么?)我已经更改了数据库中的序列,我想检查它们是否被正确更改。因此,我正在检索nextvalue以供他们检查是否有任何序列被跳过以进行更改。为什么不检查目录表以查看该更改是否正确反映…?在上述查询中使用union或union all时,我遇到了错误-Nextval不表示此上下文。union all,UNION不能与中的下一个值或seqname.NEXTVAL一起使用db2@coderzzz18 . . . 有趣。为什么您的原始代码可以工作?