String foo = "{call myStored(?,?,?,?)}";
callableStatement = dbConnection.prepareCall(foo);
callableStatement.setInt(1, 10);

callableStatement.executeUpdate();

我有一个带有20个参数的存储过程。是否可以仅设置几个参数?
该存储过程还返回一个值。我试着只是做call myStored(?)并设置callableStatement.setInt("colname", 10);我在参数数量上出现了不匹配的情况...返回值是否也应该算作一个参数,所以它是21?

最佳答案

您必须绑定在语句中声明的所有参数。 (对于每个?,您必须提供带有set *或registerOutParameter的值),但是如果这些参数具有默认值(在PL / SQL中是可能的),则不必在语句中声明它们。

在数据库中:

FUNCTION get_empName(emp_id NUMBER, emp_name VARCHAR2 DEFAULT 'Something') RETURN VARCHAR2

在Java中:
String statement1= "{? = call get_empName(?)}"; // valid statement
String statement2= "{? = call get_empName(?, ?)}"; // valid statement

如果您有一个存储的函数(它返回值),则可以这样编写语句
String foo = "{? = call myStored(?)}";
callableStatement = dbConnection.prepareCall(foo);
callableStatement.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
callableStatement.setInt(2, 10);

callableStatement.executeUpdate();

09-11 20:30