Oracle
 sql >> Base de données >  >> RDS >> Oracle

Appel d'une procédure Oracle PL/SQL avec des types de retour d'objet personnalisé à partir des pilotes 0jdbc6 JDBCthin

J'ai finalement (avec un peu d'aide des autres) trouvé la réponse à cela. Il se décomposait en trois parties :

La première était que je devais utiliser un :

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

plutôt que le simple JDBC CallableStatement que j'essayais d'utiliser.

La deuxième partie était que je devais enregistrer mon paramètre "out" comme suit :

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

La troisième partie, et elle est implicite dans la partie 2 ci-dessus, était que "DATA_SUMMARY_TAB" devait être en MAJUSCULES. Si vous le mettez en minuscules, vous obtenez un message d'erreur crypté comme suit :

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

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

C'est tout.

Veuillez également noter que notre type d'objet personnalisé ne figurait dans aucun package. Si c'est le cas, vous devrez peut-être modifier un peu le troisième paramètre.