java - 从 Spring 调用 Oracle 存储函数

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

最佳答案

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

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

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

相关文章:

java - Android recyclerview 中的 recyclerview 项目

java - 使用 java 运行外部 jar

spring - JSF 在 Spring 中查看范围

oracle - 如何在 RDS Oracle 数据库上将字符集 (NLS_CHARACTERSET) 和国家字符集 (NLS_NCHAR_CHARACTERSET) 更改为 UTF8?

oracle - 是否可以使用 flyway 管理 oracle 数据库?

java - maven project 和 sbt project and play framework 是否考虑共享一个存储库?

java - 使用 lwjgl 的 Java 中的 3D 世界?

java - 如何强制Eclipse使用maven进行自动构建

java - @ControllerAdvice 异常处理程序方法未被调用

oracle - 在 Oracle 中创建变量