Java oracle12和oracle19上ref游标的Jooq codegen类

Java oracle12和oracle19上ref游标的Jooq codegen类,java,oracle,jooq,jooq-codegen-maven,Java,Oracle,Jooq,Jooq Codegen Maven,我在包上下文中有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; pr

我在包上下文中有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>
org.jooq.pro
3.12.3
org.jooq.meta.oracle.oracle数据库
当我使用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();
    }
public静态结果getDemandForexCelupLoad(配置配置、BigInteger PCalVersionId、BigInteger pShopId、LocalDate pStartDate、LocalDate pEndDate){
GetDemandForexCelupLoad f=新的GetDemandForexCelupLoad();
f、 setPCalVersionId(PCalVersionId);
f、 setPShopId(pShopId);
f、 设置pStartDate(pStartDate);
f、 setPEndDate(pEndDate);
f、 执行(配置);
返回f.getReturnValue();
}
结果
如我所料

在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> { ...
public static TDemandForExcelUploadRecord GetDemandForexcelupLoad(配置配置、BigInteger pcalVersionId、BigInteger pShopId、LocalDate pStartDate、LocalDate pEndDate){
GetDemandForexCelupLoad f=新的GetDemandForexCelupLoad();
f、 setPCalVersionId(PCalVersionId);
f、 setPShopId(pShopId);
f、 设置pStartDate(pStartDate);
f、 setPEndDate(pEndDate);
f、 执行(配置);
返回f.getReturnValue();
}
公共类TDEMANDFOREXCELUPLOPLOADRECORD扩展UDTRecordImpl实现记录4{。。。
我的光标在哪里?请帮忙

针对oracle 19c的Maven调试:


jooq设置在这两种情况下都是相同的

这似乎是jooq 3.14中的一个缺陷,或者更确切地说是一个缺失的功能。我们没有对强类型的
REF CURSOR
类型进行任何集成测试,因此我们没有注意到这种回归。我为此创建了两个问题:

  • 添加对键入的
    REF CURSOR
    类型的支持的功能请求
  • 在3.15.0和3.14.9的功能请求实现之前,恢复到旧行为的错误。如果您需要在早期补丁版本中进行修复,请通过商业支持渠道联系

这看起来像是一个可能与一起引入的错误。我将很快对此进行调查,并提供更多信息。如果我将返回类型t\u cur\u requires\u for\u excel\u upload更改为sys\u refcursor,它工作得很好。是的,作为一个workaround@LukasEder有消息吗?