Ich habe endlich (mit ein wenig Hilfe von anderen) die Antwort darauf herausgefunden. Es kam in drei Teilen:
Das erste war, dass ich ein:
verwenden mussteOracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);
anstelle des einfachen JDBC CallableStatements, das ich zu verwenden versucht hatte.
Der zweite Teil war, dass ich meinen "out"-Parameter wie folgt registrieren musste:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");
Der dritte Teil, und er ist in Teil 2 oben implizit enthalten, war, dass „DATA_SUMMARY_TAB“ in GROSSBUCHSTABEN sein musste. Wenn Sie es in Kleinbuchstaben schreiben, erhalten Sie eine kryptische Fehlermeldung wie folgt:
java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab
bei oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553)bei oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)bei oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390)at oracle.sql.StructDescriptor.(StructDescriptor.java:320)
Das ist es.
Bitte beachten Sie auch, dass unser benutzerdefinierter Objekttyp in keinem Paket enthalten war. Wenn dies der Fall ist, müssen Sie möglicherweise den dritten Parameter ein wenig hacken.