gpt4 book ai didi

java - Spring JDBC 模板。如何获取 pl/sql 脚本的结果变量

转载 作者:行者123 更新时间:2023-11-29 10:05:33 24 4
gpt4 key购买 nike

我正在使用 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;
}
}
);

最佳答案

可以使用普通的 JdbcTemplate 来完成,如下例所示,但请注意必须在匿名 plsql block 中使用 "? := 'something'; 指定 OUT 值的方式;

下面使用的java参数:String id="12345"and String fixSql=

    declare
p_id VARCHAR2(20) := null;
p_status_message VARCHAR2(32767) := null;
begin
p_id := ?;
p_status_message := ' Everything is possible: ' || p_id;
? := 'Return text.' || p_status_message;
end;

请注意上面的两个问号 - 第一个实际上是 IN 参数,第二个是 OUT 参数。此代码将调用它:

    public class Foo extends JdbcDaoSupport {
...
public String doAnonymousPlSql(final String id, String fixSql) throws CustomerFixException {
String resultValue = getJdbcTemplate().execute(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection connection) throws SQLException {
CallableStatement sql = connection.prepareCall(fixSql);
sql.setString(1, id);
sql.registerOutParameter(2, Types.VARCHAR);
return sql;
}
}
, new CallableStatementCallback<String>() {
@Override
public String doInCallableStatement(CallableStatement callablestatement) throws SQLException,
DataAccessException {
callablestatement.executeUpdate();
return (String) callablestatement.getObject(2);
}
});

关于java - Spring JDBC 模板。如何获取 pl/sql 脚本的结果变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com