【发布时间】:2015-12-10 06:21:52
【问题描述】:
我正在尝试使用 JOOQ 在 Oracle 中调用存储过程。存储过程的一些 in 和 out 参数是自定义类型。
其中之一的定义是:
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());
但是当我执行时,我得到了这个(即使我将值设置为 null):
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生成的类。您不需要与 ojdbc API 搏斗,例如ArrayDescriptor和ARRAY。您是否(不小心)从源代码生成中排除了该类?这可以通过<exclude/>发生,或者如果表类型与表在不同的架构中,并且您没有同时包含这两个架构。 -
嗨卢卡斯,感谢您的及时回答。我使用
只生成我将要使用的内容。现在我有了一个包含该 UDT 定义的记录类。 -
嗨卢卡斯,感谢您的及时回答。我使用
仅为我将要使用的内容生成类。现在我为整个模式生成 java 类,我看到了该特定类型的“记录”类,但没有看到“表”类。不确定我必须发送什么 java 对象。我在 ArrayList 中有数据.
标签: java oracle stored-procedures jooq