【发布时间】: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