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