String foo = "{call myStored(?,?,?,?)}";
callableStatement = dbConnection.prepareCall(foo);
callableStatement.setInt(1, 10);
callableStatement.executeUpdate();
我有一个包含20个参数的存储过程。是否可以只设置一些参数?
存储过程还返回一个值。我试图做call myStored(?)
并设置callableStatement.setInt("colname", 10);
我的参数数量不匹配...如果返回值也算作参数,那么它是21?
答案 0 :(得分:4)
您必须绑定在语句中声明的所有参数。 (对于每个?你必须使用set *或registerOutParameter提供值)但是如果这些参数具有默认值(在PL / SQL中可以),那么您不必在语句中声明它们。
在DB中:
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();