Gespeicherte Prozedur Aus param durch Java
Habe ich unten stored proc:
CREATE OR REPLACE PROCEDURE "demo"."run_demo"(v_sql IN VARCHAR2, return_code OUT number)
AS
i number;
BEGIN
return_code := 0;
execute immediate v_sql;
i := sql%rowcount;
IF (i<1)
THEN return_code := 1;
END IF;
EXCEPTION
WHEN OTHERS THEN
return_code := SQLCODE;
END;
Ich versuche, es zu nennen, von Java wie unten gezeigt:
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.10.10.10:1521:demo", "demo_app", "demo");
CallableStatement cs = conn.prepareCall("{call demo.run_demo(?)}");
cs.registerOutParameter(1, Types.INTEGER);
cs.setString(1, "update demo.users set locale=''english'' where user_id = 2");
cs.execute();
System.out.println("out="+cs.getInt(1));
} catch (Exception e) {
e.printStackTrace();
}
}
Aber seine Rückkehr Fehler
"Parameter-Typ-Konflikt".
Kann einer mir sagen, was ist falsch?
Ebenfalls, wie kann ich zurück zusätzliche return_string in stored proc enthalten würde, oracle-Fehlermeldung (kann eine kurze Beschreibung der Fehlermeldung)?
Dank!
- Wie es aussieht, fehlt ein parameter. Wenn Sie gesucht haben, SO haben Sie dies gefunden: stackoverflow.com/questions/2585550/...
- Ich habe versucht, hinzufügen ? = Aufruf demo.run_demo(?) aber das hat auch nicht geholfen. Kann einer mir bitte helfen?
- Versuchen Sie cs.registerOutParameter(1, Types.DECIMAL); anstelle von cs.registerOutParameter(1, Types.INTEGER);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage @Alex van den Hoogen genannten sehr ähnlich ist, aber eine Funktion eher als ein Verfahren, das zu haben scheint, verwirrt Sie etwas. Die Kernaussage ist die gleiche; Sie sind nicht genug Parameter übergeben im Java-rufen - Sie-Einstellung und immer die gleiche positions-parameter, Zahl 1. Müssen Sie etwas tun, wie:
So, in der
prepareCall
,?,?
statt nur?
; und2
statt1
imregisterOutParameter
undgetInt
.Oder mit dem aktualisierten Verfahren von Ihrem später Frage, erhalten Sie die Fehlermeldung zu: