如何使用EclipseLink调用函数
如何调用使用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") )
Oraclefunction
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;
但是当我执行时,我收到以下错误
内部exception:java.sql.SQLException:ORA-06550:第1行,第13列:PLS-00382:表达式类型错误ORA-06550:第1行第7列:PL / SQL:语句被忽略
错误代码:6550电话:开始? := getEmps(username =>?); 结束; bind => [=> c_cursor,S7845]在org.eclipse.persistence.internal的org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:378)中查询:DataReadQuery(name =“findEmps”)。 org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)中的jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)
我该如何解决这个问题?
我认为你必须指定函数parmeter的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;
请试试吧!
- 如何使用JPA / EclipseLink与Junction Table建立多对多关系
- 使用JPA删除实体的问题
- 头脑风暴:奇怪的JPA问题,可能是classpath或jar版本问题?
- 如何配置eclipselink JTA序列连接池
- 使用JPA / EclipseLink / EJB从Java Web应用程序访问多个数据库
- 如何使用JPA设置Eclipselink?
- 有什么区别:使用JPA @TableGenerator的序列ID,@ GeneratedValue与数据库Auto_Increment
- 在EclipseLink中为每个连接设置DB Session级别参数?
- 是否可以为JPA编写通用枚举转换器?