Spring JDBC 模板。如何获取pl/sql脚本的结果变量
我正在使用 NamedParameterJdbcTemplate 来运行 pl/sql 脚本。 但我不知道如何获取 out 变量的值 (:id_out)。 提前致谢。
String script = "declare
begin
if myFunc(:id_in) is null then
:id_out := 0;
else
:id_out := 1;
end if;
end;";
Map<String,Object> bindVars = new HashMap<String, Object>();
bindVars.put(id_in,1);
bindVars.put(id_out,2);
jdbcTmpl.execute(script, bindVars, new PreparedStatementCallback<Object>() {
@Override public Object doInPreparedStatement(PreparedStatement cs)
throws SQLException, DataAccessException {
cs.execute();
return null;
}
}
);
I am using NamedParameterJdbcTemplate for run pl/sql script.
But I don't know how can I get the values of out variables (:id_out).
Thanks in advance.
String script = "declare
begin
if myFunc(:id_in) is null then
:id_out := 0;
else
:id_out := 1;
end if;
end;";
Map<String,Object> bindVars = new HashMap<String, Object>();
bindVars.put(id_in,1);
bindVars.put(id_out,2);
jdbcTmpl.execute(script, bindVars, new PreparedStatementCallback<Object>() {
@Override public Object doInPreparedStatement(PreparedStatement cs)
throws SQLException, DataAccessException {
cs.execute();
return null;
}
}
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
可以使用普通 JdbcTemplate 来完成,如下例所示,但请注意必须在匿名 plsql 块中使用“? := 'something';
下面使用的 java 参数指定 OUT 值:String id="12345" String fixSql=
请注意上面的两个问号 - 第一个实际上是 IN 参数,第二个是 OUT 参数。此代码将调用它:
It can be done with a plain JdbcTemplate as in the following example, but note the way that the OUT value must be specified in the anonymous plsql block with "? := 'something';
java parameters used below: String id="12345" and String fixSql=
Note the two question marks above - the first is effectively an IN parameter and the second an OUT parameter. This code will call it:
我不相信您可以将 NamedParameterJdbcTemplate (或 JdbcTemplate 的任何其他子类)与如上所述的匿名 PL/SQL 块一起使用。您必须将匿名 PL/SQL 块包装到存储过程或函数中。
Spring 旨在跨数据库移植。据我所知,MySQL 和 SQL Server 都没有类似于 Oracle 匿名 PL/SQL 块的概念(不过,我很高兴在这一点上被证明是错误的)。由于此功能不能跨数据库移植,因此 Spring 无法真正仅针对 Oracle 支持它。
I don't believe you can use a NamedParameterJdbcTemplate (or any other subclass of JdbcTemplate) with anonymous PL/SQL blocks such as that above. You'll have to wrap your anonymous PL/SQL block into a stored procedure or function.
Spring is intended to be portable across databases. As far as I know, neither MySQL nor SQL Server have a concept analogous to Oracle's anonymous PL/SQL blocks (I'm happy to be proved wrong on this point, though). Since this feature isn't portable across databases, Spring can't really support it for just Oracle.
这在 Spring Data 中工作得很好:
This works fine in Spring Data: