【发布时间】:2012-01-25 17:16:15
【问题描述】:
我在下面存储过程:
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;
我正在尝试从 Java 调用它,如下所示:
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();
}
}
但它的返回错误
“参数类型冲突”。
谁能告诉我怎么了?
另外,如何在存储过程中返回包含 oracle 错误消息(可能是错误消息的简短描述)的附加 return_string?
谢谢!
【问题讨论】:
-
您似乎缺少一个参数。如果您搜索过 SO,您会发现:stackoverflow.com/questions/2585550/…
-
我尝试添加? = 调用 demo.run_demo(?) 但这也无济于事。谁能帮帮我?
-
试试 cs.registerOutParameter(1, Types.DECIMAL);而不是 cs.registerOutParameter(1, Types.INTEGER);
标签: java oracle stored-procedures jdbc