如何使用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/