这里是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”变量的值?
这里是Oracle的新手。我的经验是构建将查询发送到数据库并获取“结果集”的Web应用程序,例如在Java中使用Spring和JdbcTemplate。例如,这是一个代码...
我从older question here中找到了一些指导,并提出了这种怪癖:
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