Как вызвать функцию используя EclipseLink

1

Как вызвать функцию Oracle, которая возвращает sys_refcursor с помощью 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.sql.SQLException: ORA-06550: строка 1, столбец 13: PLS-00382: выражение неправильного типа ORA-06550: строка 1, столбец 7: PL/SQL: выражение игнорируется

Код ошибки: 6550 Call: BEGIN? : = getEmps (имя пользователя =>?); КОНЕЦ; bind => [=> 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 сохраненную функцию?
  • 0
    Возможно, вы пытались выполнить недопустимый блок функции PLSQL, но произошла ошибка компиляции.
Показать ещё 1 комментарий
Теги:
jpa
eclipselink
sys-refcursor

1 ответ

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
    Попробую этот подход.
  • 0
    Та же ошибка сохраняется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню