Fetch in pl/sql-array Rückgabewerte in java
In Java, wie man Werte aus einer pl/sql
Funktion, die ein array zurückgibt.
wenn meine pl/sql-Funktion gibt array mit dem Namen myArray
, in java ist es möglich, fetch-Werten
von myArray
in java-Objekte mit callablestatement
?
Dank
Update 1
Mein Java-code, wo ich bin aufrufende Funktion, aber ich bin immer die Ausnahme.
PLS-00306: wrong number or types of arguments in call to 'myfunc'
connection = con.getConnection();
callablestatement = connection.prepareCall("{call myfunc(?,?,?}");
callablestatement.setInt(1, param1);
callablestatement.setInt(2, param2);
callablestatement.setString(3, param3);
callablestatement.registerOutParameter(4, Types.ARRAY);
callablestatement.execute();
resultSet = callablestatement.getArray(4).getResultSet();
Update 2
private final String PRODECURE_NAME = "{? = call myfunc(?,?,?)}";
und
connection = con.getConnection();
callablestatement = connection.prepareCall(PRODECURE_NAME);
callablestatement.registerOutParameter(1, Types.ARRAY);
callablestatement.setInt(2, param1);
callablestatement.setInt(3, param2);
callablestatement.setString(4, param3);
callablestatement.execute();
create or replace type dates
is varray(100) of varchar2(32);
Funktion
CREATE OR REPLACE function myfunc (
p_id IN number,
p_c_id IN number,
p_co_no IN number
)
RETURN dates
AS
myarray contract_dates;
par1 VARCHAR2 (32);
par2 VARCHAR2 (32);
Behoben Update 3
connection = con.getConnection();
callablestatement =
connection.prepareCall("begin ? :=myfunc(?,?,?); end;");
callablestatement.registerOutParameter(1, OracleTypes.ARRAY, "DATES");
callablestatement.setInt(2, param1);
callablestatement.setInt(3, param2);
callablestatement.setString(4, param3);
callablestatement.execute();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wusste ich nicht, dass mit
ARRAY
aber es sollte funktioniert. Du musst dich zuerst registrierenout
- parameter der Funktion. So kann es sein wie hier.Versuchen, diesem Mann und gibst mir dann asnwer, ob Sie es tun oder nicht.
EDIT:
Diesen char ? repräsentiert einen parameter, den Sie einstellen(es ist genannt als eingestellt).
Also diese:
bedeutet, dass Sie Ihre drei Parameter (?), erste parameter der Methode ist die Spalte index und zweitens sind Sie Daten von Ihrem speziellen Typ.
EDIT 2:
Also sorry, ich schrieb schlechte Lösung, die bereits aktualisiert, so überprüfen Sie code und testen Sie jetzt.
wrong number or types of arguments in call to 'myfunc'
Dankcallablestatement.registerOutParameter(4, Types.ARRAY); callablestatement.execute(); resultSet = callablestatement.getArray(4).getResultSet();
{? = call <ProcedureName>(?,?,?)}
es bedeutet, dass in den ersten ? ausgewählt werden, IhreArray
, Faust ? istOUT
parameter. Jetzt muss ich Weggehen, aber ich werde sein zurück später.java.sql.SQLException: ORA-06550: line 1, column 13: PLS-00382: expression is of wrong type
myArray zurück von PL/SQL ist der Typ java.sql.Array. Sie rufen getArray() auf es und geben es Stimmen zu bekommen java-array -.
getArray(typeMap)
. Weitere Informationen finden Sie unter meine Antwort auf getArray() und writeArray()Ja, Sie müssen
registerOutParameter
TypTypes.ARRAY
siehe Beispiel hier
Den JDBC-Spezifikation enthält einen ganzen Abschnitt (16.5) gewidmet, um den Umgang mit arrays. Möchten Sie vielleicht einen Blick darauf werfen.
Ich glaube, Sie können die folgende Methode verwenden, präsentieren Sie in der SerialArray-Klasse, welches ein direkter Nachfahre von java.sql.Array:
Hier die Karte, der Inhaber ein Objekt und seine Eigenschaft, die gemappt werden, um die abgerufene Ergebnismenge, die im zurückgegebenen array.
Weitere details siehe http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/serial/SerialArray.html javadoc