Это можно сделать с помощью простого JdbcTemplate, как в следующем примере, но обратите внимание на то, как значение OUT должно быть указано в анонимном блоке plsql с помощью "?: ='Thing ';
Параметры Java, используемые ниже: String id = "12345" и 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);
}
});