Cuối cùng tôi (với một chút giúp đỡ từ những người khác) đã tìm ra câu trả lời cho điều này. Nó gồm ba phần:
Đầu tiên là tôi cần sử dụng:
OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);
thay vì JDBC CallableStatement đơn giản mà tôi đã cố gắng sử dụng.
Phần thứ hai là tôi phải đăng ký tham số "out" của mình như sau:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");
Phần thứ ba, và ẩn ý trong phần 2 ở trên, là "DATA_SUMMARY_TAB" phải nằm trong TRƯỜNG HỢP LÊN LỚP. Nếu bạn đặt nó ở dạng chữ thường, thì bạn sẽ nhận được một thông báo lỗi khó hiểu như sau:
java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab
tại oracle.jdbc.oracore.OracleTypeADT.initMetadata (OracleTypeADT.java:553) tại oracle.jdbc.oracore.OracleTypeADT.init (OracleTypeADT.java:469) tại oracle.sql.StructDescriptor.init oracle.sql.StructDescriptor. (StructDescriptor.java:320)
Vậy là xong.
Ngoài ra, xin lưu ý rằng loại đối tượng tùy chỉnh của chúng tôi không có trong bất kỳ gói nào. Nếu đúng như vậy, bạn có thể cần phải hack tham số thứ ba một chút.