java - SimpleJdbcCall异常: Required input parameter is missing

标签 java oracle plsql

我需要使用 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/

相关文章:

sql - 如何使用数据更改列的数据类型

sql - 使用 Oracle 在 SQL 查询中集成 COUNT 函数时遇到问题

oracle - plsql存储过程采用参数给出错误

oracle - 如何使用带固定小数点字符的 TO_NUMBER 函数在 Oracle 中将字符串转换为数字?

java - FFMpeg 不混合音频和视频

java - 注释错误: You are not allowed to update the certifier log while creating a new user

java - Jackon 自定义解串器从未调用过

当对象包含 'init' 时,Java 反射初始化 Kotlin 对象失败

sql - 在 SYS_REFCURSOR 中执行动态 sql 语句

sql - 带有格鲁吉亚符号的 Oracle 搜索问题