JOOQ 和 Oracle REF CURSOR 流式传输

JOOQ and Oracle REF CURSOR streaming

默认情况下,JOOQ 在生成的代码中将 REF CURSOR 参数包装为 Result<Record>

在某些情况下 - 对于大型报告,使用记录流 - Cursor<Record>Stream<Record> 比一次获取所有记录更好。

我们是否有可能更改此案例的生成代码或通过其他方式实现 JOOQ 中 REF CURSOR 的 Record 流?

恐怕目前 (jOOQ 3.12) 这是不可能的。该区域有一些待处理的功能请求:

  • #4503 添加 org.jooq.Cursors extends Iterable<Cursor<Record>>
  • #4472 添加 Routine.executeLazy() 以允许获取 org.jooq.Cursors

不过,根据您使用的数据库产品,您可以将 REF CURSOR 返回过程包装在 table 值函数中,然后在普通 SELECT 中获取结果使用 jOOQ 的 ResultQuery.fetchLazy() 方法声明。这适用于 Oracle 和 PostgreSQL。