使用 StoredProcedureQuery 调用 Oracle 函数?
Posted
技术标签:
【中文标题】使用 StoredProcedureQuery 调用 Oracle 函数?【英文标题】:Calling Oracle function with StoredProcedureQuery? 【发布时间】:2014-09-03 16:27:45 【问题描述】:我正在尝试使用 javax.persistence.StoredProcedureQuery 调用 Oracle PL/SQL 函数,但收到错误 PLS-00221: 'function_name' is not a procedure or is undefined
所以我假设不可能使用StoredProcedureQuery 调用 Oracle 函数?
我没有看到 JPA 提供调用函数的接口(与存储过程相反)。那么我该如何实现呢?
【问题讨论】:
Calling an oracle function from JPA的可能重复 试试this 【参考方案1】:Oracle 函数示例:
CREATE OR REPLACE FUNCTION f_get_random_number
RETURN NUMBER
AS
BEGIN
RETURN TRUNC(dbms_random.value(1,100));
END;
解决方案 1:使用 SQL 查询
BigDecimal val = (BigDecimal)entityManager
.createNativeQuery("SELECT f_get_random_number FROM DUAL")
.getSingleResult();
解决方案 2:使用 JDBC API
Session session = entityManager.unwrap( Session.class );
Integer out = session.doReturningWork(
connection ->
try (CallableStatement function = connection.prepareCall(" ? = call f_get_random_number " ))
function.registerOutParameter( 1, Types.INTEGER );
function.execute();
return function.getInt(1);
);
【讨论】:
是的,您可以执行将调用该函数的 SQL 查询。但我正在寻找一种直接调用函数的方法,就像您可以使用存储过程一样。 可以通过JDBC API实现,如方案2所示。以上是关于使用 StoredProcedureQuery 调用 Oracle 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用inspect从Python中的被调用者那里获取调用者的信息?