如何使用EclipseLink调用返回sys_refcursor的Oracle函数?

有说明如何调用函数的文档,但不确定如何调用返回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
      致电:开始? := 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)


我该如何解决这个问题?

最佳答案

我认为您必须指定功能参数的Direction

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;


请尝试一下!

关于java - 如何使用EclipseLink调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27961486/

10-10 06:23