Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aufrufen einer Oracle PL/SQL-Prozedur mit benutzerdefinierten Objektrückgabetypen von 0jdbc6-JDBCthin-Treibern

Ich habe endlich (mit ein wenig Hilfe von anderen) die Antwort darauf herausgefunden. Es kam in drei Teilen:

Das erste war, dass ich ein:

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

anstelle des einfachen JDBC CallableStatements, das ich zu verwenden versucht hatte.

Der zweite Teil war, dass ich meinen "out"-Parameter wie folgt registrieren musste:

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

Der dritte Teil, und er ist in Teil 2 oben implizit enthalten, war, dass „DATA_SUMMARY_TAB“ in GROSSBUCHSTABEN sein musste. Wenn Sie es in Kleinbuchstaben schreiben, erhalten Sie eine kryptische Fehlermeldung wie folgt:

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

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

Das ist es.

Bitte beachten Sie auch, dass unser benutzerdefinierter Objekttyp in keinem Paket enthalten war. Wenn dies der Fall ist, müssen Sie möglicherweise den dritten Parameter ein wenig hacken.