更新时间: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.