【发布时间】:2015-01-15 10:35:15
【问题描述】:
如何使用 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)
我该如何解决这个问题?
【问题讨论】:
-
可以发布你的plsql storedFunction 吗?
-
可能是您尝试执行无效的PLSQL函数块,但出现编译错误。
-
@CHHIBIAMOR 我已将我的 PLSQL 函数包含在我的问题中,并且函数已编译,并且我已从其他程序成功执行它。当我尝试使用 EclipseLink 调用时,我没有成功。
标签: java oracle jpa eclipselink sys-refcursor