У меня есть хранимая процедура Oracle, которая принимает вход CLOB и выход REFCURSOR. Я вызываю SP через Spring SimpleJdbcCall, проходящий в RowMapper для сопоставления результатов.
Однако, поскольку набор результатов является большим, мне нужно предоставить функцию обратного вызова клиенту. Я не могу понять, как добавить обратный вызов для вызова SP с помощью Spring - как с SimpleJdbcCall, так и без него.
Одна мысль, что у меня есть - передать RowCallbackHandler. Будет ли это работать или есть лучший способ решить эту проблему? Любая помощь здесь ценится.
private Map<String, Object> arguments = ...;
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(this.jdbcTemplate)
.withCatalogName(this.packageName)
.withProcedureName(this.storedProcName)
.withoutProcedureColumnMetaDataAccess()
.declareParameters(this.outputParameters.toArray(new SqlOutParameter[]{}));
if(!isEmpty(inputParameters)) {
jdbcCall.declareParameters(inputParameters.toArray(new SqlParameter[]{}));
}
this.outputParameters.add(new SqlOutParameter(outputParamName, VARCHAR, rowMapper));
jdbcCall.execute(arguments);
На самом деле RowCallbackHandler
является хорошим решением для вашего дела:
this.outputParameters.add(new SqlOutParameter(outputParamName, VARCHAR, new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
// Build model object from ROW and invoke client service from here
}
}));
jdbcCall.execute(arguments);