【问题标题】:Is StoredProcedureQuery meant for calling Oracle functions with?StoredProcedureQuery 是否用于调用 Oracle 函数?
【发布时间】:2014-09-04 09:02:22
【问题描述】:

您好,我使用的是 Eclipselink 2.5.1

我想知道,是否可以使用javax.persistence.StoredProcedureQuery 调用 Oracle Pl/Sql 函数

我尝试这样做,但收到错误 PLS-00221: 'function_name' is not a procedure or is undefined

如果不是,如果我想坚持 JPA 标准,调用函数的正确方法是什么?没有类型StoredFunctionQuery。我是否必须在查询中执行select 语句?

【问题讨论】:

    标签: jpa eclipselink


    【解决方案1】:

    JPA StoredProcedureQuery 映射到 JDBC CallableStatement。这就是所有要知道的。如果 Oracle “函数”可以使用它调用,那么任何 JPA 实现都应该能够使用 JPA API 调用它们。

    如果“Oracle 函数”是普通 SQL 函数,那么您可以在任何普通 JPQL 语句中使用 JPA 2.1 中的“FUNCTION(funcName, args)”

    【讨论】:

    • 我试过了,好像Pl/Sql函数不是可调用语句,因为函数返回值,所以必须像variable_name := function_name(1234)一样使用
    • 所以你在 JPA 中使用原生查询(对于所有非 标准 SQL 存储过程)
    • Billy 很好的提示,但我在设置这样的查询时遇到错误:select FUNCTION('function_name', 'foo', 1234) from dual 正确的方法是什么?
    • 澄清一下,我应该在 FROM 子句中放什么,因为我不想从数据库中获取任何东西(调用函数除外),但是 JPQL 不允许空白 FROM 子句。
    • Dual 不是实体,因此 JPQL 无效,因此只能作为 Native。您尚未定义如何在 SQL 环境中正常调用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多