从Spring调用Oracle存储函数

时间:2016-08-29 13:39:00

标签: java spring oracle hibernate jpa

我有一个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前缀但数据库中的数字与后端中的数字一致)

1 个答案:

答案 0 :(得分:1)

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

declareParameter(new SqlOutParameter("return_param", Types.VARCHAR));
相关问题