且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从0jdbc6 JDBCthin驱动程序使用自定义对象返回类型调用Oracle PL/SQL过程

更新时间:2022-04-12 09:39:35

我终于(在别人的帮助下)找到了答案.它分为三个部分:

I finally (with a little help from others) found out the answer to this. It came in three parts:

首先是我需要使用:

OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);

不是我一直尝试使用的简单JDBC CallableStatement.

rather than the simple JDBC CallableStatement I had been trying to use.

第二部分是我必须按如下方式注册"out"参数:

The second part was that I had to register my "out" parameter as follows:

stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");

第三部分(在上面的第二部分中是隐含的)是"DATA_SUMMARY_TAB"必须在大写形式下.如果将其小写,则会收到如下错误消息:

The third part, and it is implicit in part 2 above, was that "DATA_SUMMARY_TAB" had to be in UPPER CASE. If you put it in lower case, then you get a cryptic error message as follows:

java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab

oracle.jdbc.oracore.OracleTypeADT.initMetadata上的

(OracleTypeADT.java:553) 在oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469) 在oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390) 在oracle.sql.StructDescriptor.(StructDescriptor.java:320)

at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553) at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469) at oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390) at oracle.sql.StructDescriptor.(StructDescriptor.java:320)

就是这样.

此外,请注意,我们的自定义对象类型不在任何程序包中.如果是这样,您可能需要修改一下第三个参数.

Also, please note our custom object type was not in any packages. If it is, you might need to hack the third parameter around a little.