Я использую EclipseLink для веб-проекта, включающего EJB 3 и хранимые процедуры Oracle. Мы все еще в начале, поэтому у меня была настроена простая процедура для тестирования, вот подпись:
p_test.testProcedure(as_param in varchar2)
Вот код, который я использую для вызова процедуры, аналогично статье Использование Basic Query API в Eclipsepedia:
JpaEntityManager jem = (JpaEntityManager) em.getDelegate();
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("p_test.testProcedure");
call.addNamedArgument("param", "param", String.class);
DataReadQuery query = new DataReadQuery();
query.setCall(call);
query.addArgument("param", String.class);
Vector<String> values = new Vector<String>();
values.add("test");
jem.getActiveSession().executeQuery(query, values);
Я получаю эту ошибку:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050):
org.eclipse.persistence.exceptions.DatabaseException Internal Exception:
java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of
arguments in call to 'TESTPROCEDURE' ORA-06550: line 1, column 7: PL/SQL: Statement
ignored Error Code: 6550 Call: BEGIN p_test.testProcedure(param=>?); END; bind => [test] Query: DataReadQuery()
Я также пытался установить тип аргумента вызова в java.sql.Types.VARCHAR, но ни в коем случае, безрезультатно.
У кого-то есть идеи, что я делаю не так? Спасибо всем.