Я выполняю запрос к своему приложению Spring, которое будет выбирать данные в моей базе данных на основе этого запроса:
SELECT * FROM
(
SELECT a.*, rownum r__
FROM
(
SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N'
) a
WHERE rownum < ((1 * 3) + 1 )
)
WHERE r__ >= (((1-1) * pageSize) + 1)
Цель состоит в том, чтобы просто просмотреть результаты.
КогдаЯ выполняю код в своих окнах запросов к базе данных. Я получил ожидаемые результаты, но при выполнении непосредственно в Java-коде, как обычно, я получил эту ошибку:
Причина: org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;плохая грамматика SQL [SELECT * FROM (SELECT a. *, rownum r__ FROM (SELECT * FROM ПОДПИСКИ, ГДЕ status = 'active' и is_blocked = 'N') a ГДЕ rownum <((? *?) + 1)) ГДЕ r__> = (((? -1) *?) + 1)];Вложенное исключение - java.sql.SQLException: Неверное имя столбца
Я не понимаю, почему это возвращает эту ошибку, потому что мой запрос работает при выполнении на Oracle SQL Client ...
Чтобы выполнить мой запрос, я делаю это:
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pageSize", paging.getItemsPerPage());
params.addValue("pageNumber", paging.getPageToFetch());
SqlQueryLogger.logDebugSqlQuery(selectActiveAndUnblockedSubscriptionPaged, params, log);
List<Subscription> subscriptions = getNamedParameterJdbcTemplate().query(selectActiveAndUnblockedSubscriptionPaged, params, new SubscriptionRowMapper());
SubscriptionPagingResult subscriptionPagingResult = new SubscriptionPagingResult();
subscriptionPagingResult.setResult(subscriptions);
и переменная selectActiveAndUnblockedSubscriptionPaged:
"SELECT * FROM" +
"(" +
" SELECT a.*, rownum r__" +
" FROM" +
" (" +
" SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N'" +
" ) a" +
" WHERE rownum < ((:pageNumber * :pageSize) + 1 )" +
")" +
"WHERE r__ >= (((:pageNumber-1) * :pageSize) + 1)";
У кого-нибудь есть идеи, почему этот код не работает?Спасибо