gpt4 book ai didi

java - 从 Spring 调用 Oracle 存储函数

转载 作者:行者123 更新时间:2023-12-01 09:33:26 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于java - 从 Spring 调用 Oracle 存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com