用于 oracle 12c 和 oracle 19c 中的引用游标的 Jooq 代码生成类
Posted
技术标签:
【中文标题】用于 oracle 12c 和 oracle 19c 中的引用游标的 Jooq 代码生成类【英文标题】:Jooq codegen classes for ref-cursor on oracle12 and oracle19 【发布时间】:2021-06-12 15:34:22 【问题描述】:我在包上下文中有 plsql 代码:
type t_demand_for_excel_upload is record
(
bsns_oper_name t_string,
demand_date date,
demand_hour integer,
demand_value number
);
type t_cur_demands_for_excel_upload is ref cursor return t_demand_for_excel_upload;
procedure get_demands_for_excel_upload
(
p_calc_version_id in integer,
p_shop_id in integer,
p_start_date in date,
p_end_date in date,
p_result out t_cur_demands_for_excel_upload
);
Jooq 版本:
<jooq.groupId>org.jooq.pro</jooq.groupId>
<jooq.version>3.12.3</jooq.version>
<jooq.generator.db.dialect>org.jooq.meta.oracle.OracleDatabase</jooq.generator.db.dialect>
当我使用 oracle 12c 生成代码时 - 没关系,它在 java 中看起来像这样:
public static Result<Record> getDemandsForExcelUpload(Configuration configuration, BigInteger pCalcVersionId, BigInteger pShopId, LocalDate pStartDate, LocalDate pEndDate)
GetDemandsForExcelUpload f = new GetDemandsForExcelUpload();
f.setPCalcVersionId(pCalcVersionId);
f.setPShopId(pShopId);
f.setPStartDate(pStartDate);
f.setPEndDate(pEndDate);
f.execute(configuration);
return f.getReturnValue();
Result<Record>
如我所料。
在 Maven 中调试:
在 oracle 19c 上生成的代码如下所示:
public static TDemandForExcelUploadRecord getDemandsForExcelUpload(Configuration configuration, BigInteger pCalcVersionId, BigInteger pShopId, LocalDate pStartDate, LocalDate pEndDate)
GetDemandsForExcelUpload f = new GetDemandsForExcelUpload();
f.setPCalcVersionId(pCalcVersionId);
f.setPShopId(pShopId);
f.setPStartDate(pStartDate);
f.setPEndDate(pEndDate);
f.execute(configuration);
return f.getReturnValue();
public class TDemandForExcelUploadRecord extends UDTRecordImpl<TDemandForExcelUploadRecord> implements Record4<String, LocalDate, BigInteger, BigDecimal> ...
我的光标在哪里?请帮忙。
Oracle 19c 的 Maven 调试:
jooq 设置在两种情况下都是相同的
【问题讨论】:
这看起来像是 github.com/jOOQ/jOOQ/issues/7861 引入的错误。我会尽快对此进行调查并提供更多信息。 如果我将返回类型 t_cur_demands_for_excel_upload 更改为 sys_refcursor 它工作得很好。 是的,这是一种解决方法 @LukasEder 有什么消息吗? 【参考方案1】:这似乎是 jOOQ 3.14 中的一个错误,或者说是缺少的功能。我们没有针对强类型REF CURSOR
类型进行任何集成测试,因此我们没有注意到这种回归。我为此创建了两个问题:
REF CURSOR
类型的支持的功能请求
https://github.com/jOOQ/jOOQ/issues/11709 在 3.15.0 和 3.14.9 实现功能请求之前恢复到旧行为的错误。如果您需要在较早的补丁版本中进行修复,请通过商业支持渠道与我们联系。
【讨论】:
以上是关于用于 oracle 12c 和 oracle 19c 中的引用游标的 Jooq 代码生成类的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 12c 多租户家族(12c 18c 19c)如何在 PDB 中添加 HR 模式
由于 Oracle DB 从 12c 升级到 19c,对现有 SQL、PL/SQL 脚本和数据模型有何影响?