很多RDBMS都支撑某种形式的标准SQL序列。创立一个序列的标准SQL语法是:

CREATE SEQUENCE s;

以下是你怎么运用jOOQ从这个序列中获取一个值,假设你运用的是代码生成器:

// import static com.example.generated.Sequences.*;
System.out.println(ctx.fetchValue(S.nextval()));

序列表达式能够翻译成各种方言:

-- CockroachDB, PostgreSQL, YugabyteDB
nextval('s')
-- Db2, HANA, Informix, Oracle, Snowflake, Sybase SQL Anywhere, Vertica
s.nextval
-- Derby, Firebird, H2, HSQLDB, MariaDB, SQL Server
NEXT VALUE FOR s

你也能够把S.nextval() 字段表达式嵌入就任何其他能够找到Field<?> 的当地,包含从SELECT 内取值:

ctx.select(S.nextval()).fetch();

或许,假如你需要一次性获取多个序列值,运用nextvals()

System.out.println(ctx.fetchValues(S.nextvals(10)));

这就会打印出类似的东西:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

而正在履行的查询运用jOOQ的GENERATE_SERIES 仿真来一次性获取所有的值,例如H2的:

SELECT NEXT VALUE FOR s
FROM system_range(1, 10)