Курсор ошибки неподдерживаемой функции для SqlInOutParameter в Spring - PullRequest
0 голосов
/ 24 января 2019

Я должен выполнить хранимую процедуру с 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?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вот так я решил проблему ... Во-первых, я не добавил параметр in / out в качестве входного параметра в 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()));

Это сработало для меня ...

0 голосов
/ 24 января 2019

Я не знаю, сильно ли это помогает, но я быстро нашел эту ошибку:

Состояние SQL [99999];код ошибки [17023];Неподдерживаемая функция: sqlType = -10;

Возможно, у вас проблема с драйвером Oracle.Может не поддерживать курсоры.Это довольно далеко, но попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...