【发布时间】:2018-06-20 17:21:44
【问题描述】:
要调用 Oracle 数据库函数,我只需编写
final Query query = entityManager.createNativeQuery(
"select myfunction(?) from dual"
);
query.setParameter(1, "value");
Object rv = query.getSingleResult();
只要被调用的函数不执行任何 dml 操作,它就可以工作。 否则我必须执行类似
{? = call myfunction(?)}
很遗憾,我无法注册任何 OUT 参数,因此我无法让此语句正常工作。 如果不使用普通的 JDBC,我怎样才能做到这一点?
编辑:
这个问题具有误导性。我想在 Oracle 数据库中获取函数(不是存储过程)的结果。没有 OUT 参数。该函数可能如下所示:
CREATE OR REPLACE FUNCTION myfunction(value IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
UPDATE foo SET bar = 'foobar'
WHERE id = 1;
RETURN 'test';
END myfunction;
Calling an oracle function from JPA 的答案并没有解决我的问题,因为我的函数内部有 dml 更改。我收到一个错误:
无法在查询中执行 DML 操作
【问题讨论】:
-
@anste 你是怎么解决的。我陷入了同样的问题
-
@Ismail 不幸的是我没有解决这个问题。我尽可能将函数更改为带有 OUT 参数的过程。或者,您可以创建一个包装过程,该过程调用该函数并将结果放入一个输出参数中。
-
@anste 我解决了。我没有找到任何使用 JPA 的解决方案,所以我不得不使用 JDBC CallableStatement。我会把它添加到答案中
标签: java hibernate jpa entitymanager