2011-07-11 79 views
0

我有一个表XYZ(ID主键,名称)。该表有超过10000行。 我想在一个时间。对于这一点,我不得不从表中第1000行处理1000行,然后更新该表为每results.For第1000行,我可以使用从表中选择行的范围

select * from XYZ where rownum >=1 and rownum <= 1000 

但取接下来的1000行,我不知道如何,因为如果我写

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

查询给出0 rows.Any知道如何写query.Please help.I正在使用Oracle 11g数据库编写查询。

回答

3

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

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

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

您需要引入一个子查询到rownum转变成一个真正的列:

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

要得到你真正想要的结果。

+0

感谢DONNIE为您的答案.IF我使用这个查询将是最优化的。因为我们是先行10000行,然后从结果中选择1000行。 – facebook