如何在Spring中使用JdbcTemplate调用PL / SQL过程并返回其输出变量?

问题描述 投票:0回答:2

这里是Oracle的新手。我的经验是构建将查询发送到数据库并获取“结果集”的Web应用程序,例如在Java中使用Spring和JdbcTemplate。

例如,这是一个带有常规SQL查询的代码示例,使用RowMapper类将结果集的行转换为Java列表:

public List<Widget> findAllWidgets() {
    return jdbcTemplate.query("SELECT * FROM widgets", new WidgetRowMapper());
}

现在,我负责编写一个调用PL / SQL存储过程的查询。这个过程有两个输入参数(我可以处理)和两个输出参数(我们称它们为error_codeerror_message)。我想向数据库发送查询,该查询将(a)用我的输入运行该过程,并且(b)返回两个输出。同样,我很乐意将两个输出作为“行”,或者将它们绑定到两个Java变量。

这是我尝试过的方法,它没有引发错误,但是也没有获取输出值。 Java变量errorCodeerrorMessage保留为空字符串:

public Map<String,String> callMyProcedure() {
    String errorCode="";
    String errorMessage="";
    jdbcTemplate.update("call myprocedure(?,?,?,?)","input1","input2",errorCode,errorMessage);
    return Map.of("errorCode",errorCode,"errorMessage",errorMessage);
}

问题是:当使用JdbcTemplate从Java调用过程时,如何捕获PL / SQL过程的“ OUT”变量的值?

这里是Oracle的新手。我的经验是构建将查询发送到数据库并获取“结果集”的Web应用程序,例如在Java中使用Spring和JdbcTemplate。例如,这是一个代码...

spring plsql jdbctemplate
2个回答
0
投票

我从older question here中找到了一些指导,并提出了这种怪癖:


0
投票
您可以在jdbcTemplate下获得连接并使用get方法作为getNString获得输出>

try (Connection connection = DataSourceUtils.getConnection(jdbcTemplate.getDataSource()); CallableStatement statement = connection.prepareCall("{call myprocedure(?,?,?,?,?,?,?,?)}"); statement.execute(); statement.getNString(1); // using index or your parameter name

© www.soinside.com 2019 - 2024. All rights reserved.