SQL - неверное имя столбца при выполнении в DAO - PullRequest
0 голосов
/ 02 февраля 2019

Я выполняю запрос к своему приложению 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)";

У кого-нибудь есть идеи, почему этот код не работает?Спасибо

1 Ответ

0 голосов
/ 02 февраля 2019

Просто предположение, что вы пропустили псевдоним таблицы после thr main из ()

SELECT t.* FROM
(
    SELECT a.*, a.rownum r__
    FROM
    (
        SELECT * 
        FROM SUBSCRIPTIONS 
        WHERE status = 'active' 
        and is_blocked = 'N'
    ) a
    WHERE a.rownum < ((1 * 3) + 1 )
) t 
WHERE t.r__ >= (((1-1) * t.pageSize) + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...