【问题标题】:Invoking Oracle stored function from Spring从 Spring 调用 Oracle 存储函数
【发布时间】:2016-08-29 13:39:00
【问题描述】:

我有一个 Oracle 数据库和其中具有以下签名的存储函数:

FUNCTION fnc_a_b1(pv_a10  IN VARCHAR2,
                          pn_b OUT NUMBER,
                          pv_c  OUT VARCHAR2) RETURN VARCHAR2 DETERMINISTIC

有一个 Java/Spring 后端应该调用这个函数,到目前为止我已经完成了以下操作:

public class MyStoredFunction extends StoredProcedure {

    public MyStoredFunction(final DataSource datasource) {
        super(datasource, "package_name.fnc_a_b1");
        setFunction(true);
        declareParameter(new SqlParameter("pv_a10", Types.VARCHAR));
        declareParameter(new SqlOutParameter("pn_b", Types.NUMERIC));
        declareParameter(new SqlOutParameter("pv_c", Types.VARCHAR));
        compile();
    }
}

我像这样执行它:

final Map<String, Object> params = new HashMap<>();
params.put("pv_a10", "123123");
new MyStoredFunction(datasource).execute(params);

我明白了

java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'FNC_A_B1'

知道为什么吗?一切似乎都很好(抱歉名称混淆 - 名称中的数字以及 pv/pn 前缀实际上都存在,但来自 db 的数字与后端的数字一致)

【问题讨论】:

  • 您是否尝试过为返回值添加另一个 out 参数?
  • @Deroude,实际上没有(我对这一切都很陌生)。为返回值添加另一个 declareParameter 修复了它。如果您愿意,可以发表您的评论作为答案(也非常感谢!)

标签: java spring oracle hibernate jpa


【解决方案1】:

您的函数返回VARCHAR2。这基本上是另一个 OUT 参数。将其添加到您的声明中应该可以解决此问题。

declareParameter(new SqlOutParameter("return_param", Types.VARCHAR));

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2017-05-16
    • 2013-06-06
    • 1970-01-01
    • 2021-12-22
    • 2016-12-17
    • 1970-01-01
    • 2011-12-05
    • 2018-02-02
    相关资源
    最近更新 更多