我需要使用 withoutProcedureColumnMetaDataAccess(); SimpleJdbcCall 中的方法以避免不必要的元日期调用,为了使用它,我需要声明参数。参数之一是 OUT SYS_REFCURSOR。在Java中声明时应该是什么类型?
我尝试将其声明为 Types.REF_CURSOR,但随后出现错误:缺少必需的输入参数“o_warning_cur”
程序调用:
getStatusCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("loan")
.withCatalogName("b_loan")
.withProcedureName("can_sign")
.withoutProcedureColumnMetaDataAccess();
getSigningStatusCall.addDeclaredParameter(new SqlParameter("i_contract", Types.VARCHAR));
getSigningStatusCall.addDeclaredParameter(new SqlParameter("is_contract_in_paper", Types.VARCHAR));
getSigningStatusCall.addDeclaredParameter(new SqlParameter("o_warning_cur", Types.REF_CURSOR));
数据库程序:
PROCEDURE can_sign(i_contract IN laen.leping.leping%TYPE,
is_contract_in_paper IN varchar2,
o_warning_cur OUT SYS_REFCURSOR) IS
InvalidDataAccessApiUsageException:缺少必需的输入参数“o_warning_cur”
最佳答案
要声明输出引用游标参数,可以调用方法
public SimpleJdbcCall returningResultSet(String parameterName, RowMapper<?> rowMapper);
可用于 SimpleJdbcCall 对象。在这个例子中,它看起来像这样:
getStatusCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("loan")
.withCatalogName("b_loan")
.withProcedureName("can_sign")
.returningResultSet("o_warning_cur", rowMapper());
.withoutProcedureColumnMetaDataAccess();
[...]
RowMapper<ResultDTO> rowMapper() {
return (rs, rowNum) -> new ResultDTO(rs.getString("X"), rs.getString("Y"));
}
您也可以尝试以与您尝试的类似的方式声明它,但不是创建 SqlParameter 对象,而是创建 SqlOutParameter。在此示例中:
getSigningStatusCall.addDeclaredParameter(new SqlOutParameter("o_warning_cur", Types.REF_CURSOR));
关于java - SimpleJdbcCall异常: Required input parameter is missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397477/