Sql 从Oracle表中获取1000行集

Sql 从Oracle表中获取1000行集,sql,oracle,select,Sql,Oracle,Select,我想使用查询一次选择1000行: SELECT * FROM MEMBERID_1M WHERE ROWNUM <1000 如何在for循环中从此表中获取下一组1000行?我建议您使用如下行数函数:我的id是您的PK SELECT M.* FROM ( SELECT MEMBERID_1M.*, ROW_NUMBER() OVER (ORDER BY id) As rn FROM MEMBERID_1M ) M WHERE (rn <= 1000) 复

我想使用查询一次选择1000行:

SELECT * FROM MEMBERID_1M WHERE ROWNUM <1000
如何在for循环中从此表中获取下一组1000行?

我建议您使用如下行数函数:我的id是您的PK

SELECT M.* 
FROM (
    SELECT MEMBERID_1M.*, ROW_NUMBER() OVER (ORDER BY id) As rn
    FROM MEMBERID_1M ) M
WHERE 
    (rn <= 1000)
复制

只有一种相当复杂的方法可以做到这一点,这对甲骨文来说是一种真正的痛苦。他们应该只执行一个限制/抵消条款

rownum在where子句选择行后被赋值,因此rownum必须始终以1开头。其中rownum>x将始终计算为false

此外,rownum在排序完成之前被分配,因此rownum的顺序将与order by的顺序不同

您可以使用子选择来解决这两个问题:

 select a,b,c, rn from 
    ( select a,b,c, rownum rn from 
         ( select a,b,c from the_table where x = ? order by c)
      where rownum < Y)
  where rn > X
如果不需要排序,但只需要排序,则可以简化为

 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X

您应该在服务器端进行分页。请使用此查询 更多详情请参考此链接


请提及Oracle版本。标准版一-Oracle 11gIt给出:ORA-00923:FROM关键字未找到预期的00923。00000-在预期的*原因:*处找不到FROM关键字:*操作:第10行列处出错:13I在内部选择中忘记在*之前使用表名;。
 select a,b,c, rn from 
    ( select a,b,c, rownum rn from 
         ( select a,b,c from the_table where x = ? order by c)
      where rownum < Y)
  where rn > X
 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X
select * 
  from 
( select rownum rnum, a.*
    from (SELECT * FROM MEMBERID_1M ) a
   where rownum <= :M )
where rnum >= :N;