Java Spring中SqlInOutParameter的不支持功能错误Ref游标

Java Spring中SqlInOutParameter的不支持功能错误Ref游标,java,spring-boot,oracle11g,Java,Spring Boot,Oracle11g,我必须执行一个有13个参数的存储过程。有输入、输出和输入/输入参数。我正在从Spring Boot Java web服务调用存储过程。 存储过程引发以下异常: SQL状态[99999];错误代码[17023];不支持的功能: sqlType=-10 当我使用作为参考光标的输入/输出参数时。 (我为string或integer类型的输入、输出或输入/输出参数创建了一个存储过程,它工作得很好。但问题在于光标 这是调用存储过程的代码: MapSqlParameterSource parameterSo

我必须执行一个有13个参数的存储过程。有输入、输出和输入/输入参数。我正在从Spring Boot Java web服务调用存储过程。 存储过程引发以下异常:

SQL状态[99999];错误代码[17023];不支持的功能: sqlType=-10

当我使用作为参考光标的输入/输出参数时。 (我为string或integer类型的输入、输出或输入/输出参数创建了一个存储过程,它工作得很好。但问题在于光标

这是调用存储过程的代码:

MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("p_input_stream", input);
parameterSource.addValue("p_cur", null);

simpleJdbcCall.withCatalogName(PACKAGE).withProcedureName(PROCEDURE_TEST);
simpleJdbcCall.declareParameters(
    new SqlParameter("p_input_stream", OracleTypes.VARCHAR), 
    new SqlInOutParameter("p_cur", OracleTypes.CURSOR, new LoadCursorMapper()));
result = simpleJdbcCall.execute(parameterSource);
我正在使用ResultSetTextRactor接口映射光标的结果集。 这是一节课:

public class LoadCursorMapper implements ResultSetExtractor<LoadCursor> {

    public LoadCursor extractData(ResultSet resultSet) throws SQLException, DataAccessException {

         LoadCursor trailer = new LoadCursor();
         trailer.setTrlrNbr(resultSet.getBigDecimal("trlr_nbr"));
         trailer.setTrlrPrefix(resultSet.getString("trlr_prefix"));           
         trailer.setCatgoryCodeLoadCondStat(resultSet.getString("catg_code_load_cond_stat"));
         trailer.setDetailCodeLoadCondStat(resultSet.getString("detl_code_load_cond_stat"));

        return trailer;
    }
}
运行服务时,我收到错误信息:

SQL状态[99999];错误代码[17023];不支持的功能: sqlType=-10

如有任何建议,将不胜感激

更新 我还尝试了RowMapper接口,并得到了相同的错误


如何在Java中使用Oracle游标作为输入参数?

我不知道它是否有很大帮助,但我快速搜索了这个错误:

SQL状态[99999];错误代码[17023];不支持的功能:sqlType=-10

您的Oracle驱动程序似乎有问题。它可能不支持游标。
这有点遥不可及,但试一下。

这就是我解决问题的方法。。。 首先,我没有将in/out参数作为输入参数添加到MapSqlParameterSource中。 因此,我的MapSqlParameterSource如下所示:

MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("p_input_stream", input);
simpleJdbcCall.declareParameters(
    new SqlParameter("p_input_stream", OracleTypes.VARCHAR), 
    new SqlOutParameter("p_cur", OracleTypes.CURSOR, new LoadCursorMapper()));
然后我在JdbcSimpleCall中将该参数声明为仅输出参数,如下所示:

MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("p_input_stream", input);
simpleJdbcCall.declareParameters(
    new SqlParameter("p_input_stream", OracleTypes.VARCHAR), 
    new SqlOutParameter("p_cur", OracleTypes.CURSOR, new LoadCursorMapper()));

这对我很有用…

web服务使用oracle 12驱动程序,数据库使用oracle 11驱动程序