Как установить параметры INOUT из внешнего интерфейса при вызове хранимой процедуры - PullRequest
1 голос
/ 08 марта 2011

Я разработал SP, скажем, abc (a, b, c), где

  • является IN параметром
  • b - параметр OUT
  • c является параметром INOUT.

Если я вызываю этот 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>), он запускается успешно.

Я хочу вызвать этот SP через программу Java. Для этого я устанавливаю параметры IN & INOUT. И регистрация параметров OUT & INOUT. Но это дает мне ту же ошибку, что и выше

Ответы [ 2 ]

6 голосов
/ 02 апреля 2012
2 голосов
/ 08 марта 2011

Вам необходимо использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...