java - passing-Arrays in oracle gespeicherten Prozedur
Ich habe eine Java-Anwendung auf eine oracle-gespeicherten Prozedur. Die Argumente, die an die gespeicherte Prozedur enthalten ein array-Typ. Ich mache es wie folgt...
con = this._getConnection();
Connection narrowdConn = (Connection)WSJdbcUtil.getNativeConnection( (WSJdbcConnection)con );
callable = con.prepareCall("{call MY_PKG.MY_PROCEDURE(?, ?)}");
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("VARCHAR2_ARR", narrowdConn);
ARRAY arrayArg1 = new ARRAY(arrayDescriptor, con, docNames);
ARRAY arrayArg2 = new ARRAY(arrayDescriptor, con, docTypes);
callable.setArray(1, arrayArg1);
callable.setArray(2, arrayArg2);
callable.execute();
Nun, ich bekomme die Ausnahme...
java.sql.SQLException: invalid name pattern: MY_PKG.VARCHAR2_ARR
VARCHAR2_ARR ist eine öffentliche ART, definiert innerhalb eines Oracle-Pakets wie folgt:
TYP VARCHAR2_ARR IST TABELLE VARCHAR2(50);
Und als solche in mein gespeicherter...
PROCEDURE MY_PROCEDURE
(V_ARR_ARG1 IN VARCHAR2_ARR,
V_ARR_ARG2 IN VARCHAR2_ARR)
InformationsquelleAutor coder | 2009-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Art
VARCHAR2_ARR
ist ein PLSQL-Typ, Sie werden nicht in der Lage sein, um eine Schnittstelle direkt aus java. Ich schlage vor, Sie schauen in dieser thread auf AskTom über eine ähnliche Frage stellen.Hier sind ein paar Vorschläge für Sie:
In beiden Fällen müssen Sie entweder ändern Sie die PLSQL-Verfahren oder fügen Sie eine neue übersetzung Verfahren.
PLSQL-Typen können nicht direkt zugegriffen werden, aus java. Sie haben eine echte SQL-Typ (CREATE type,...) und entweder ein wrapper-Prozedur mit der SQL-Typ oder ändern Sie Ihre Vorgehensweise zur Aufnahme der neuen Art.
Wenn ich es richtig verstehe, wenn ein Typ deklariert ist, in einem Paket es heißt PLSQL-Typ Recht? Ich bin verwirrt über wie funktioniert die jdbc-gelingt, einen Aufruf einer Prozedur deklariert und definiert, die innerhalb eines Pakets wenn ein Aufruf eines PLSQL-Typ fehlschlägt. Was ist der Unterschied zwischen den beiden?
Es ist ähnlich wie die, die Sie sind in der Lage, um die öffentliche Methode einer Klasse in java , jedoch keinen direkten Zugriff auf private member. Nur eine Analogie , ich weiß, es ist nicht der Grund.
InformationsquelleAutor Vincent Malgrat
Müssen wir um accessToUnderlyingConnectionAllowed falg wahr, während der Erstellung einer datasource
InformationsquelleAutor