Почему FETCH FIRST N ROWS не работает в сочетании с оператором WITH?

У меня есть следующий оператор SQL, который не работает в моей базе данных DB2:

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS

Без заявления FETCH это работает. Я получаю сообщение об ошибке:

Ожидалось незаконное использование ключевого слова OPTIMIZE, токена ERR_STMT WNG_STMT GET SQL SAVEPOINT HOLD FREE ASSOCIATE.

Какие-либо предложения?

3 ответа

Вы скучаете по ONLY ключевое слово в конце предложения FETCH.

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS ONLY;

Хотя приведенный вами пример, вероятно, упрощен, как насчет размещения первого предложения fetch в первой части select?

Я никогда не смогу прочитать документацию ясно, но так как оператор with создает выражение общего стола, вы не сможете использовать предложение fetch-first-предложение при его выборе. Согласно этой документации наличие в предложении with-оператора предложения fetch-first-valid является допустимым синтаксисом.

т.е.

WITH a AS (
SELECT * FROM sysibm.systables
FETCH FIRST 10 ROWS ONLY
)
SELECT a.* FROM a;

Отсутствует единственное ключевое слово в конце. Пример тут.

Другие вопросы по тегам