带有 ARRAY 的 jooq oracle 存储过程,无效的列类型:1111

jooq oracle stored procedures with ARRAY, Invalid column type: 1111

我正在尝试使用 JOOQ 在 Oracle 中调用存储过程。存储过程的一些输入和输出参数是自定义类型。

其中之一的定义是:

CREATE OR REPLACE TYPE "TAB_VARCHAR2_500" is table of varchar2(500);

我正在以这种方式创建 oracle.sql.ARRAY 类型:

ArrayDescriptor ard=ArrayDescriptor("TAB_VARCHAR2_500",connection);

//this is my object of the stores procedure, generated by jooq

aimws.setPDataDesc(new oracle.sql.ARRAY(ard,connection,lineData.toArray()));

aimws.execute(jooq.configuration());

但是当我执行时,我得到了这个(即使我将值设置为空):

SQL state [99999]; error code [17004]; Invalid column type: 1111; nested exception is java.sql.SQLException: Invalid column type: 1111

在 JOOQ 为该存储过程生成的 java 类 中,类型为

public static final Parameter<Object> P_DATA_DESC = createParameter("P_DATA_DESC", org.jooq.impl.DefaultDataType.getDefaultDataType("TABLE"), false);

我正在使用 Spring 将应用程序部署为 jboss

中的 EAR 项目

我做错了什么?我必须在 java 中创建什么样的对象?

很可能您在代码生成期间没有包含 TAB_VARCHAR2_500 类型,这就是生成器输出中缺少它的原因。一旦让生成器生成此类型,就可以将其用作数组的包装器。通常:

aimws.setPDataDesc(new TabVarchar2_500Record(lineData));
aimws.execute(jooq.configuration());