Я должен выполнить хранимую процедуру с 13 параметрами. Есть входные, выходные и входные / входные параметры. Я вызываю хранимую процедуру из веб-службы Spring Boot Java.
Хранимая процедура выдает исключение:
Состояние 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);
Я использую интерфейс 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; * * тысяча двадцать-одна
Будем благодарны за любые предложения.
UPDATE
Я также попробовал интерфейс RowMapper и получил ту же ошибку.
Как я могу использовать Oracle Cursor в качестве входного параметра в Java?