sql >> Base de Datos >  >> RDS >> Oracle

Llamar a un procedimiento Oracle PL/SQL con tipos de devolución de objetos personalizados desde controladores 0jdbc6 JDBCthin

Finalmente (con un poco de ayuda de otros) descubrí la respuesta a esto. Vino en tres partes:

La primera fue que necesitaba usar un:

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

en lugar del simple JDBC CallableStatement que había estado tratando de usar.

La segunda parte fue que tuve que registrar mi parámetro "out" de la siguiente manera:

stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");

La tercera parte, y está implícita en la parte 2 anterior, era que "DATA_SUMMARY_TAB" tenía que estar en MAYÚSCULAS. Si lo escribe en minúsculas, obtendrá un mensaje de error críptico como el siguiente:

java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab

en oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553)en oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)en oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390)en oráculo.sql.StructDescriptor.(StructDescriptor.java:320)

Eso es todo.

Además, tenga en cuenta que nuestro tipo de objeto personalizado no estaba en ningún paquete. Si es así, es posible que deba modificar un poco el tercer parámetro.