【发布时间】:2020-02-04 15:55:23
【问题描述】:
这里是 Oracle 的新手。我的经验是构建将查询发送到数据库并返回“结果集”的 Web 应用程序,例如在 Java 中使用 Spring 和 JdbcTemplate。
例如,下面是一个带有常规 SQL 查询的代码示例,它使用 RowMapper 类将结果集的行转换为 Java 列表:
public List<Widget> findAllWidgets() {
return jdbcTemplate.query("SELECT * FROM widgets", new WidgetRowMapper());
}
现在我的任务是编写一个调用 PL/SQL 存储过程的查询。这个过程有两个输入参数(这些我可以处理)和两个输出参数(我们称它们为error_code 和error_message)。我想向数据库发送一个查询,该数据库将 (a) 使用我的输入运行该过程并 (b) 返回两个输出。我同样很乐意将两个输出作为“行”或简单地将它们绑定到两个 Java 变量。
这是我尝试过的,它没有抛出错误,但也没有得到输出值。 Java 变量 errorCode 和 errorMessage 保持为空字符串:
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”变量的值?
编辑:我接受了不使用 JdbcTemplate 的 Alex 的回答,因为这似乎是更好的方法。我自己的答案确实使用了 JdbcTemplate,但需要更多的代码,所以如果你正在寻找专门回答问题的东西,那就可以了。
【问题讨论】:
标签: spring plsql jdbctemplate