Oracle
 sql >> Database >  >> RDS >> Oracle

Chiamata di una procedura Oracle PL/SQL con tipi restituiti di oggetti personalizzati dai driver 0jdbc6 JDBCthin

Alla fine (con un piccolo aiuto da parte di altri) ho scoperto la risposta a questo. Era diviso in tre parti:

Il primo era che dovevo usare un:

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

piuttosto che il semplice CallableStatement JDBC che stavo cercando di usare.

La seconda parte era che dovevo registrare il mio parametro "out" come segue:

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

La terza parte, ed è implicita nella parte 2 sopra, era che "DATA_SUMMARY_TAB" doveva essere in MAIUSCOLO. Se lo metti in minuscolo, viene visualizzato un messaggio di errore criptico come segue:

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

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

Questo è tutto.

Inoltre, tieni presente che il nostro tipo di oggetto personalizzato non era in nessun pacchetto. Se lo è, potrebbe essere necessario modificare un po' il terzo parametro.