从 H2 数据库和 DB2 中选择 NEXTVAL

Selecting NEXTVAL from H2 Database and DB2

目前我正在使用 H2 进行集成测试,使用 DB2 进行 DEV 和 UAT。

为了从序列中获取下一个值,我们对 Db2 使用了 Values NEXTVAL FOR SCHEMANAME.SEQNAME SQL,它按预期工作。

但是上面的 SQL 在 H2 数据库中不起作用,我们在 H2 中使用 Select NEXTVAL ('SCHEMANAME','SEQNAME')。这在 Db2

中不起作用

但是我需要使用相同的 SQL 查询或同时使用 DB2 和 H2 来获取 NEXTVAL

我们可以使用一个 SQL 在 H2 和 DB2 中得到 NEXTVAL 吗?

SQL 标准有一个 NEXT VALUE FOR sequenceGeneratorName 表达式。两个数据库都支持此表达式:

https://www.ibm.com/support/knowledgecenter/en/SSEPEK_12.0.0/sqlref/src/tpc/db2z_sequencereference.html

https://h2database.com/html/grammar.html#sequence_value_expression

您可以使用

进行测试
VALUES NEXT VALUE FOR SCHEMANAME.SEQNAME;

请注意,您需要最新版本的 H2(例如 1.4.199),因为旧版本的 H2 不支持 table 值构造函数(VALUES …)。