W końcu (z niewielką pomocą innych) znalazłem odpowiedź na to pytanie. Przyszło w trzech częściach:
Po pierwsze, musiałem użyć:
OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);
zamiast prostego JDBC CallableStatement, którego próbowałem użyć.
Druga część polegała na tym, że musiałem zarejestrować mój parametr „out” w następujący sposób:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");
Trzecia część, i jest dorozumiana w części 2 powyżej, była taka, że „DATA_SUMMARY_TAB” musiało być pisane WIELKIMI LITERAMI. Jeśli zapiszesz go małymi literami, otrzymasz zagadkowy komunikat o błędzie w następujący sposób:
java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab
w oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553)w oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)w oracle.sql.StructDescriptor.initPickler. oracle.sql.StructDescriptor.(StructDescriptor.java:320)
To wszystko.
Należy również pamiętać, że nasz niestandardowy typ obiektu nie znajdował się w żadnym pakiecie. Jeśli tak, być może trzeba będzie trochę zhakować trzeci parametr.