从表中选择行范围

时间:2011-07-11 05:32:28

标签: sql oracle11g

我有一个表XYZ(ID主键,名称)。该表有超过10000行。 我想一次处理1000行。为此,我必须先从表中输入1000行,然后根据结果更新表。对于我可以使用

获取的前1000行
   select *  from XYZ where rownum >=1 and rownum <= 1000

但是对于接下来的1000行,我不知道如何编写查询,因为如果我写

select count(*)  from XYZ where rownum >=1000 and rownum < 2000

查询给出0行。任何想法如何编写查询。请帮助。我正在使用Oracle 11g数据库。

1 个答案:

答案 0 :(得分:3)

rownum不是真正的列,它是在生成行时生成的伪列,从1开始向上计数。

所以,你的查询: select * from XYZ where rownum >= 1000 and rownum <= 2000

不返回任何行。为什么? Oracle生成第一行并为其指定一个1的rownum。然后检查它是否应包含在结果集中。 Rownum&lt; 1000,所以没有。它继续下一行,并使用下一个最大的尚未使用的rownum ...仍然是1.重复直到表的结尾。

您需要引入子选择以将rownum转换为实际列:

select * from
  (select rownum r, * from xyz) inner
where
  inner.r >= 1000 and inner.r <= 2000

获得你真正想要的结果。