Ограничение запросов SQL для DB2 AS / 400 версии 4
Я знаю, что версия слишком старая (да, версия 4!), но у меня нет выбора.
как ограничить мой запрос, например, 100 строк только для DB2 AS400?
FETCH FIRST n ROWS ONLY
и
ROW_NUMBER()
не работают.
любые идеи или обходные пути?
вот пример SQL-запроса (не работает):
SELECT POLNOP FROM ZICACPTF.POLHDR FETCH FIRST 10 ROWS ONLY
Он говорит:
[SQL0199] выборка ключевых слов не ожидается. Действительные токены: для соединения с заказом ОПТИМИЗИРОВАТЬ.
2 ответов
нет поддержки СУБД для этой операции, проверьте версия 4 DB2 UDB для AS / 400 SQL Reference: нет Limit
, Top
, First
, ... зарезервированные слова.
вы можете попытаться ограничить строки через предложение where,where sequence between 100 and 200
. Но это нереальный сценарий.
первая работа вокруг С помощью курсора:
DECLARE ITERROWS INTEGER;
...
SET ITERROWS = 0;
DO WHILE (SUBSTR(SQLSTATE,1,2) = '00' and ITERROWS < 100
DO
...
SET ITERROWS = ITERROWS + 1;
второе в язык промежуточного ПО.
Я надеюсь, что кто-то хитрый обходной путь, но, в на мой взгляд, нет.
решение только для > V4R4
используя FETCH FIRST [n] ROWS ONLY
:
SELECT LASTNAME, FIRSTNAME, EMPNO, SALARY
FROM EMP
ORDER BY SALARY DESC
FETCH FIRST 10 ROWS ONLY;
ссылка:publib.boulder.ibm.com
разница, которую я вижу из вашего запроса к этому примеру, заключается в том, что здесь мы используем ORDER BY
предложение - у вас есть возможность добавить ORDER BY
- Это следует сделать трюк. Ссылка на:https://stackoverflow.com/a/16858430/1581725
получить ряды или также только первые 10 строк, вы должны использовать ROW_NUMBER()
(С v5r4):
SELECT
*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY {{table field}}) AS ROWNUM, * {{yourtable}}
) AS {{yourcursor}}
WHERE
{{yourcursor}}.ROWNUM>0 AND
{{yourcursor}}.ROWNUM<=10
ссылка:blog.zanclus.com