Я отвечаю за задачу, которая, на мой взгляд, должна быть простой, но, поскольку я никогда не выполнял ее раньше, у меня возникли некоторые проблемы с ней. Я успешно создал проект EJB 3, используя EclipseLink, который будет вызывать ряд хранимых процедур из базы данных Oracle. Я правильно настроил источник данных, я могу подключаться и выполнять простые хранимые процедуры и функции (без параметров и возврата курсора); однако в настоящее время я не могу выполнить хранимые процедуры с параметрами.
Я использую вики EclipseLink для справки http://wiki.eclipse.org/Using_Basic_Query_API_(ELUG).
Код:
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("p_environment.startSession");
List<String[]> args = new ArrayList<String[]>();
args.add(new String[] { "user", "ae01403" });
args.add(new String[] { "application", "app_code" });
args.add(new String[] { "locale", "it_IT" });
for (String[] pair : args) {
call.addNamedArgumentValue(pair[0], pair[1]);
}
DataReadQuery query = new DataReadQuery(call);
for (String[] pair : args) {
query.addArgument(pair[0]);
}
На основании документации базы данных, поскольку у меня нет доступа к самой базе данных, процедура принимает 3 параметра VARCHAR IN с указанным именем. Затем я вызываю метод executeQuery в активном сеансе, но получаю ошибку «Неверный тип или количество аргументов». Что я делаю неправильно? Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: подпись хранимой процедуры, в соответствии с документацией, является:
p_environment.startSession(as_user IN VARCHAR2,
as_application IN VARCHAR2,
as_locale IN VARCHAR2);
Большое спасибо!