java—如何使用eclipselink调用函数

4xrmg8kj  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(432)

如何使用eclipselink调用返回sys\u refcursor的oracle函数?
有一个文档说明了如何调用函数,但不确定如何调用返回sys\u refcursor的函数。
http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_namedstoredfunctionquery.htm
我试过以下方法

  1. @NamedStoredFunctionQuery(name = "findEmployees",
  2. functionName = "getEmps",
  3. parameters =
  4. { @StoredProcedureParameter(queryParameter = "user",
  5. name = "username",
  6. direction = Direction.IN,
  7. type = String.class)
  8. } ,
  9. returnParameter = @StoredProcedureParameter(queryParameter = "c_cursor")
  10. )

oracle函数

  1. CREATE or REPLACE FUNCTION getEmps (username varchar2)
  2. RETURN SYS_REFCURSOR
  3. AS
  4. c_cursor SYS_REFCURSOR;
  5. BEGIN
  6. OPEN c_cursor FOR
  7. SELECT * FROM employees where emp_no=username;
  8. RETURN c_cursor;

然而,当我执行时,我得到以下错误
内部异常:java.sql.sqlexception:ora-06550:第1行,第13列:pls-00382:表达式的类型错误ora-06550:第1行,第7列:pl/sql:忽略语句
错误代码:6550调用:开始?:=getemps(用户名=>?);结束;bind=>[=>c\u 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)
如何解决此问题?

nqwrtyyt

nqwrtyyt1#

将函数保存在数据库中,然后使用函数调用执行它。
例如,我有一个名为“sumacampo”的oracle函数,它对数据库的两列求和:

我的问题是:

  1. select Function('SUMACAMPO') from Table t

java代码:

  1. Query q = em.createQuery("select Function('SUMACAMPO') from Table t");
  2. List<Object[]> resultado= q.getResultList();
  3. LOG.info("Resultado consulta: {}",resultado);

因此,在日志中执行查询的输出是:

  1. Resultado consulta: [4413700]
7eumitmz

7eumitmz2#

我想你必须详细说明 Direction 函数参数

  1. CREATE or REPLACE FUNCTION getEmps (username IN varchar2)
  2. RETURN SYS_REFCURSOR
  3. AS
  4. c_cursor SYS_REFCURSOR;
  5. BEGIN
  6. OPEN c_cursor FOR
  7. SELECT * FROM employees where emp_no=username;
  8. RETURN c_cursor;

请试一试!

相关问题