Jag fick äntligen (med lite hjälp från andra) reda på svaret på detta. Den kom i tre delar:
Den första var att jag behövde använda en:
OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);
snarare än det enkla JDBC CallableStatement jag hade försökt använda.
Den andra delen var att jag var tvungen att registrera min "out"-parameter enligt följande:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");
Den tredje delen, och den är implicit i del 2 ovan, var att "DATA_SUMMARY_TAB" måste vara i VERSALER. Om du sätter det med små bokstäver får du ett kryptiskt felmeddelande enligt följande:
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.StrucvaPickler(.StrucvaPickor) oracle.sql.StructDescriptor.(StructDescriptor.java:320)
Det var allt.
Observera också att vår anpassade objekttyp inte fanns i några paket. Om det är det kan du behöva hacka den tredje parametern lite.