Вызов функции Oracle с StoredProcedureQuery

Основываясь на поддержке операторов Callable и многих других документах, javax.persistence.StoredProcedureQuery представлен в jpa 2.1 для

стандартизированная поддержка работы с JDBC CallableStatements (вызовы хранимых процедур и функций)

но при попытке вызвать функцию оракула с экземпляром StoredProcedureQuery результат всегда

PLS-00221: 'function_name' is not a procedure or is undefined

Этот код, как я его использую:

StoredProcedureQuery query = em.createStoredProcedureQuery("function_name");

query.registerStoredProcedureParameter("param1", String.class, ParameterMode.IN);
query.registerStoredProcedureParameter("param2", String.class, ParameterMode.IN);
query.registerStoredProcedureParameter("param3", String.class, ParameterMode.OUT);
query.setParameter("param1", "will");
query.setParameter("param2", "smith");
query.execute();
Object param3 = query.getOutputParameterValue("param3");

Объявление моей функции выглядит так:

function "function_name"(
      param1 in varchar2, param2 in varchar2, param3 out varchar2
   ) return number  is

Так что с ним не так.


person A.v    schedule 29.12.2014    source источник
comment
Как выглядит объявление function_name?   -  person Codo    schedule 29.12.2014
comment
Кажется, что невозможно вызывать функции, используя чистый JPA. Некоторые люди достигают этого с помощью запроса SELECT F(X) FROM DUAL. В вашем случае это не сработает, так как у вас есть выходной параметр. Некоторые люди возвращаются к собственным операторам (SQL). В вашем случае вы можете переписать (или обернуть) функцию как хранимую процедуру со вторым параметром OUT вместо возвращаемого значения.   -  person Codo    schedule 29.12.2014
comment
Как утверждает @Codo, на самом деле не рекомендуется, чтобы функция возвращала выходной параметр.   -  person OldProgrammer    schedule 29.12.2014
comment
Проблема в том, что я использую функции другой команды, и они спроектированы так, и я должен использовать их так. Суть, как сказал @Codo, заключается в том, чтобы обернуть их функцию моими собственными процедурами и вызвать мои собственные процедуры. В любом случае большое спасибо, ребята.   -  person A.v    schedule 29.12.2014
comment
Доступ к функциям Oracle можно получить через простой JDBC API. проверьте решение.   -  person ukchaudhary    schedule 03.11.2017