2011-09-27 8 views
3

У меня есть следующий SQL заявление, которое не работает на моей базе данных DB2:Почему FETCH FIRST N ROWS не работает в сочетании с инструкцией WITH?

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

без FETCH заявления он работает. Сообщение об ошибке я получаю: Ожидалось

Незаконное использование ключевого слова ОПТИМИЗАЦИЯ, лексемы ERR_STMT WNG_STMT GET SQL SAVEPOINT ПРОВЕСТИ СВОБОДНОЕ Associate.

Любые предложения?

+0

Спасибо за ответы. Я просто забыл скопировать ключевое слово «ТОЛЬКО». Если я его добавлю, запрос все равно не работает! Такое же сообщение об ошибке. – Boris

ответ

6

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

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

Да, это проблема –

+0

Я только забыл копировать «ТОЛЬКО» здесь. Я использовал его в исходном заявлении, и запрос не работал. У меня такое чувство, что оно связано с предложением 'WITH'. – Boris

0

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

0

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

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

т.е.

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

 Смежные вопросы

  • Нет связанных вопросов^_^