我开发了一个SP,比如abc(a,b,c),其中
如果我直接从数据库中调用此sp作为abc(<val>,?,?),
我得到错误
The number of variables in the EXECUTE statement, the number of variables in the OPEN statement, or the number of arguments in an OPEN statement for a parameterized cursor is not equal to the number of values required.
但如果我将其作为abc(<val>,?,<val>)
运行,则会成功运行。
我想通过Java程序调用此SP。为此,我正在设置IN&amp; INOUT参数。并注册OUT&amp; INOUT参数。但它给了我与上面相同的错误
答案 0 :(得分:6)
答案 1 :(得分:2)
您需要使用java.sql.CallableStatement
来处理参数。
因此,按照您的示例,您的电话将是:
String sql = "{ call abc(?, ?, ?) }";
CallableStatement cs = conn.prepareCall(sql);
cs.setInt(1, 20); // setting "a" in parameter to 1
cs.registerOutParameter(2, Types.VARCHAR); // setting "b" as out parameter
cs.setString(3, "Some String"); // setting "c" as in parameter
cs.registerOutParameter(3, Types.VARCHAR); // setting "c" as out parameter
// then execute
cs.executeUpdate();
// and retrieve out parameters
String bout = cs.getString(2);
String cout = cs.getString(3);