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