Calling an Oracle PL/SQL procedure with Custom Object return types from 0jdbc6 JDBCthin drivers

后端 未结 2 454
广开言路
广开言路 2021-01-01 06:43

I\'m writing some JDBC code which calls a Oracle 11g PL/SQL procdedure which has a Custom Object return type. Whenever I try an register my return types, I get either ORA-0

相关标签:
2条回答
  • 2021-01-01 07:08

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

    The first was that I needed to use an:

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

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

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

    stmt.registerOutParameter(2, OracleTypes.STRUCT, "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
    

    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)

    That's it.

    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.

    0 讨论(0)
  • 2021-01-01 07:11

    You two different and perhaps contradictory error messages there.

    PLS-00306: wrong number or types of arguments in call to 'string' 
    

    What is the dexcription of user defined type data_summary_tab? OracleTypes.CURSOR expects a REF CURSOR, which is equivalent to a JDBC ResultSet. Whereas data_summary_tab sounds like it might be a varray or nested table.

    ORA-03115: unsupported network datatype or representation
    

    This suggests you are using an older version of the client than the database server (say 10g or even 9i). Normally we can get away with it, but sometime it can cause bugs where we're doing uncommon things. I'm not sure whether calling user-defined types over JDBC ought to count as an "uncommon thing" but I suspect it may.

    0 讨论(0)
提交回复
热议问题