我目前正在处理PL-SQL存储过程,因此从应用程序(REST应用程序)中,我向Store_procedure发送了几个IN参数,在过程中,我正在解析一些输入,并且很少有具有IN OUT参数的字段而其中很少是光标。
这是现有程序,正在被xml中的旧版应用程序使用。我正在做的就是在其中添加一个新的REST层。
现在,我收到此例外:
"SQL state [99999]; error code [17004]; Invalid column type: 1111; nested exception is java.sql.SQLException: Invalid column type: 1111]"
我确实检查了所有列以及所有列,但仍然无法成功。 我还试图在响应会回来时映射事物。
谢谢。
我必须执行具有13个参数的存储过程。有输入,输出和输入/输入参数。 我正在从Spring Boot Java Web服务调用存储过程。存储过程引发异常:
SQL state [99999]; error code [17023]; Unsupported feature: sqlType=-10;
当我使用作为参考光标的输入/输出参数时。 (我为字符串,整数类型的输入,输出或输入/输出参数创建了一个存储过程,它可以正常工作。但这是游标的问题。
这是调用存储过程的代码:
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);```
I am using the ResultSetExtractor interface to map the result set for the cursor. This is the class:
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;
}
}
我不确定声明游标参数的方式是否正确。这段代码特别
new SqlInOutParameter("p_cur", OracleTypes.CURSOR, new LoadCloseSummaryTrailerCursorMapper()));
运行服务时,出现错误:
SQL state [99999]; error code [17023]; Unsupported feature: sqlType=-10;
答案 0 :(得分:0)
您需要将返回结果集添加到调用中,并在 Result 类中声明所有光标输出字段名称。
simpleJdbcCall.withCatalogName(PACKAGE).withProcedureName(PROCEDURE_TEST)
.declareParameters(
new SqlParameter("p_input_stream", OracleTypes.VARCHAR),
new SqlInOutParameter("p_cur", OracleTypes.CURSOR))
..returningResultSet("p_cur", BeanPropertyRowMapper.newInstance(Results.class));