2015-01-15 4 views
1

Как вызвать функцию Oracle, которая возвращает sys_refcursor с помощью EclipseLink?Как вызвать функцию с помощью EclipseLink

Существует документация, в которой говорится о вызове функции, но обязательно, как вызвать функцию, которая возвращает sys_refcursor.

http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_namedstoredfunctionquery.htm

Я попытался следующие

@NamedStoredFunctionQuery(name = "findEmployees", 
          functionName = "getEmps", 
          parameters = 
          { @StoredProcedureParameter(queryParameter = "user", 
                 name = "username", 
                 direction = Direction.IN, 
                 type = String.class) 
      } , 
    returnParameter = @StoredProcedureParameter(queryParameter = "c_cursor") 
) 

Oracle Функция

CREATE or REPLACE FUNCTION getEmps (username varchar2) 
     RETURN SYS_REFCURSOR 
    AS 
    c_cursor SYS_REFCURSOR; 
    BEGIN 
    OPEN c_cursor FOR 
    SELECT * FROM employees where emp_no=username; 
    RETURN c_cursor; 

Однако, когда я исполняю, я получаю следующие ошибки

Внутренняя Исключение: java.s ql.SQLException: ORA-06550: строка 1, столбец 13: PLS-00382: выражение неправильного типа ORA-06550: строка 1, столбец 7: PL/SQL: Заявление игнорировали

Код ошибки: 6550 Звоните: НАЧАТЬ? : = getEmps (имя пользователя =>?); КОНЕЦ; связываются => [=> c_cursor, S7845] Запрос: DataReadQuery (Name = "findEmps") в org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException (QueryImpl.java:378) на org.eclipse. persistence.internal.jpa.QueryImpl.executeReadQuery (QueryImpl.java:260) в org.eclipse.persistence.internal.jpa.QueryImpl.getResultList (QueryImpl.java:469)

Как я могу решить эту проблему ?

+0

может разместить свой plsql storedFunction? –

+0

Возможно, вы попытались выполнить недопустимый блок функции PLSQL, но произошла ошибка компиляции. –

+0

@CHHIBIAMOR Я включил свою функцию PLSQL в свой вопрос, и функция скомпилирована, и я успешно выполнял ее из других программ. Когда я попытался позвонить с помощью EclipseLink, я не был успешным. – user75ponic

ответ

1

Я думаю, вы должны указать Direction функций Parmeter

CREATE or REPLACE FUNCTION getEmps (username IN varchar2) 
     RETURN SYS_REFCURSOR 
    AS 
    c_cursor SYS_REFCURSOR; 
    BEGIN 
    OPEN c_cursor FOR 
    SELECT * FROM employees where emp_no=username; 
    RETURN c_cursor; 

Попробуйте, пожалуйста!

+1

Попробуем этот подход. – user75ponic

+0

Такая же ошибка сохраняется. – user75ponic

Смежные вопросы