Oracle Row提取限制

时间:2014-11-25 09:01:56

标签: sql database oracle

我想获取10000到20000 rownum之间的数据我已经进行了此查询

SELECT xml_to_string(XMLRECORD) FROM TABLENAME WHERE ROWNUM >10000 AND ROWNUM<=20000

但上面的查询不起作用,但当我将查询更改为

SELECT xml_to_string(XMLRECORD) FROM TABLENAME WHERE ROWNUM >0 AND ROWNUM<=20000 它工作正常

我错过了什么..?

2 个答案:

答案 0 :(得分:1)

rownum不会停留在任何表格中它会生成运行时间,因此当您运行任何sql语句时,只会在那个时间生成rownum,因此您不能指望您可以在between关闭中使用行数。

答案 1 :(得分:1)

试试这个:

SELECT xml_to_string(XMLRECORD) FROM (select t.*, rownum rw from TABLENAME t) 
WHERE  rw>10000 AND rw<=20000

当Oracle检索查询结果时计算Rownum。这就是查询select * from some_table where rownum > 1永远不会返回任何内容的原因。

此外,如果没有ORDER BY,则获取10000到20000之间的行是没有意义的。您也可以获得第一个10000(因为行未分类,结果是不可预测的 - 任何行都可以是第一行)。 / p>

来自Oracle文档:

  

对于查询返回的每一行,ROWNUM伪列返回a   表示Oracle从a中选择行的顺序的数字   表或一组连接的行。选中的第一行的ROWNUM为1,   第二个有2个,依此类推。

     

测试ROWNUM值大于正整数的条件   总是假的。例如,此查询不返回任何行:

SELECT *
FROM employees
WHERE ROWNUM > 1;
  

为获取的第一行分配一个ROWNUM为1并生成   条件错误。要获取的第二行现在是第一行和   也被赋予ROWNUM为1并使条件为假。所有行   随后无法满足条件,因此不返回任何行。