Почему 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.

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


person Boris    schedule 27.09.2011    source источник
comment
Спасибо за ответы. Я просто забыл скопировать ключевое слово ONLY. Если я добавлю его, запрос все равно не будет работать! То же сообщение об ошибке.   -  person Boris    schedule 28.09.2011


Ответы (3)


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

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS ONLY;
person Joe Stefanelli    schedule 27.09.2011
comment
Я только забыл скопировать ONLY сюда. Я использовал его в исходном заявлении, и запрос не работал. У меня такое ощущение, что это связано с пунктом WITH. - person Boris; 28.09.2011

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

person Clarkey    schedule 27.09.2011

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

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

i.e.

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