如何使用较少的参数调用存储过程?

时间:2014-12-01 22:51:06

标签: java sql oracle

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

callableStatement.executeUpdate();

我有一个包含20个参数的存储过程。是否可以只设置一些参数? 存储过程还返回一个值。我试图做call myStored(?)并设置callableStatement.setInt("colname", 10);我的参数数量不匹配...如果返回值也算作参数,那么它是21?

1 个答案:

答案 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();