Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Chamando um procedimento Oracle PL/SQL com tipos de retorno de objeto personalizado de drivers JDBCthin 0jdbc6


Eu finalmente (com uma pequena ajuda de outros) descobri a resposta para isso. Ele veio em três partes:

A primeira foi que eu precisava usar um:
OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);

em vez do simples JDBC CallableStatement que eu estava tentando usar.

A segunda parte foi que tive que registrar meu parâmetro "out" da seguinte forma:
stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");

A terceira parte, e está implícita na parte 2 acima, era que "DATA_SUMMARY_TAB" tinha que estar em MAIÚSCULAS. Se você colocá-lo em letras minúsculas, receberá uma mensagem de erro enigmática da seguinte maneira:
java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab

em oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:553)em oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:469)em oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:390)em oracle.sql.StructDescriptor.(StructDescriptor.java:320)

É isso.

Além disso, observe que nosso tipo de objeto personalizado não estava em nenhum pacote. Se for, talvez seja necessário hackear um pouco o terceiro parâmetro.