Почему FETCH FIRST N ROWS не работает в сочетании с оператором WITH? - PullRequest
3 голосов
/ 27 сентября 2011

У меня есть следующий оператор 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 HOLD. Ожидалось.

Есть предложения?

Ответы [ 3 ]

6 голосов
/ 27 сентября 2011

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

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS ONLY;
0 голосов
/ 29 сентября 2011

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

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

т.е.

WITH a AS (
SELECT * FROM sysibm.systables
FETCH FIRST 10 ROWS ONLY
)
SELECT a.* FROM a;
0 голосов
/ 27 сентября 2011

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

...