недопустимый реляционный оператор после 32766 записей при использовании NamedParameterJdbcTemplate.query с кортежем - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь выполнить приведенный ниже запрос с предложением IN и передачей кортежей с номером 32767 или более с помощью метода NamedParameterJdbcTemplate.query.Но я получаю ошибку ниже:

In DataAccessException:PreparedStatementCallback; bad SQL grammar [SELECT ID, STATUS FROM ID_DETAILS WHERE (ID, 1) IN ((?, ?), (?, ?), (?, ?), (?, ?)..32767 times)  ORDER BY ID, EL_SEQ ASC]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator

Эта ошибка НЕ ​​выдается, когда число переданных идентификаторов меньше или равно 32766 .Может ли кто-нибудь помочь в этом отношении

Ниже приведен код, используемый:

List<Object[]> ids = getToupleOf(idList); //idList has 32767 or more Long values
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("IDLIST", ids);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new 
NamedParameterJdbcTemplate(
    getJdbcTemplate().getDataSource());

return namedParameterJdbcTemplate.query(SQLConstants.REFRESH_QUERY, 
                                         parameters,
       new ResultSetExtractor<List<ResponseVO>>() {
        @Override
        public List<ResponseVO> extractData(ResultSet rs)
                throws SQLException, DataAccessException {
            List<ResponseVO> retList = new LinkedList<ResponseVO>();
            while (rs.next()) {
                ResponseVO eachResponse = constructResponseVOFromRS(rs);
                retList.add(eachResponse);
            }
            return retList;
        }
    });

Ниже приведен код для getToupleOf ():

private List<Object[]> getToupleOf(List<Long> idSet){
    List<Object[]> list = new LinkedList<Object[]>();

    idSet.forEach(l->{
        Object[] touple = new Object[2];
        touple[0] = l.longValue();
        touple[1] = 1;
        list.add(touple);
    });

    return list;

}

SQLConstants.REFRESH_QUERY мыпрохождение дано ниже:

public static final String REFRESH_QUERY = "SELECT ID, STATUS FROM ID_DETAILS WHERE (ID, 1) IN (:IDLIST) ORDER BY ID, EL_SEQ ASC";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...