带有 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());
我正在尝试使用 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());