我知道版本太旧了(是的,版本4!),但我别无选择。
如何仅针对DB2 AS400限制我的查询示例100行?
FETCH FIRST n ROWS ONLY
和
ROW_NUMBER()
不行。
任何想法或解决方法?
以下是一个示例SQL查询(不起作用):
SELECT POLNOP FROM ZICACPTF.POLHDR FETCH FIRST 10 ROWS ONLY
它说
[SQL0199]不期望关键字FETCH。有效令牌:FOR FOR ORDER UNION OPTIMIZE。
答案 0 :(得分:2)
此操作没有dbms支持,请检查Version 4 DB2 UDB for 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;
第二个,使用中间件语言。
我希望有人发布一个聪明的解决方法,但是,在我看来,他们不是。
答案 1 :(得分:0)
仅针对&gt;的解决方案V4R4
使用FETCH FIRST [n] ROWS ONLY
:
SELECT LASTNAME, FIRSTNAME, EMPNO, SALARY
FROM EMP
ORDER BY SALARY DESC
FETCH FIRST 10 ROWS ONLY;
从您对此示例的查询中我可以看到的差异是,我们在这里使用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