java - Spring 中 SqlInOutParameter 的功能错误引用游标不受支持
问题描述
我必须执行一个有 13 个参数的存储过程。有输入、输出和输入/输入参数。我正在从 Spring Boot Java Web 服务调用存储过程。存储过程引发以下异常:
SQL 状态 [99999];错误代码 [17023];不支持的功能: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);
我正在使用 ResultSetExtractor 接口来映射游标的结果集。这是课程:
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 状态 [99999];错误代码 [17023];不支持的功能:sqlType=-10;
任何建议,将不胜感激。
更新 我也尝试了 RowMapper 接口并得到同样的错误。
如何在 Java 中使用 Oracle 游标作为输入参数?
解决方案
这就是我解决问题的方法......首先,我没有在 MapSqlParameterSource 中添加输入/输出参数作为输入参数。我的实例中的这些值始终为空。所以我的 MapSqlParameterSource 看起来像这样:
MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("p_input_stream", input);
然后我在 JdbcSimpleCall 中将该参数声明为仅输出参数,如下所示:
simpleJdbcCall.declareParameters(
new SqlParameter("p_input_stream", OracleTypes.VARCHAR),
new SqlOutParameter("p_cur", OracleTypes.CURSOR, new LoadCursorMapper()));
这对我有用...
推荐阅读
- c++ - 有人能解释一下向量的含义吗
() - html - 替换 WYSIWYG html 中的文本
- asp.net - Membership.DeleteUser(vUser) 中的等待操作超时;
- apache-kafka - 有没有办法在 Kafka 连接器配置中映射 RabbitMQ 路由键以注册 RabbitMQSourceConnector?
- c# - 在 Elastic 中映射类的动态列
- node.js - 如何使用 Nodejs 将文件的内容读入控制台
- eclipse - 插件 org.eclipse.jdt.ui 无法加载类 org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart。Kotlin 插件在 Eclipse 中不起作用
- c# - 如何使用反射从方法中获取字段的名称?
- javascript - ASP.NET MVC 向 JS 发送类对象的问题 - JS 数组中的空对象
- reactjs - 我想从此数组中获取值,但我无法准确选择它