如何从Oracle数据库查询有限数量的行?

时间:2014-07-23 14:31:13

标签: php sql oracle

我有一个大型Oracle数据库,需要处理大量记录。我正在验证PHP中的数据,然后从经过验证的数据数组生成XML代码。由于大量结果,XML文件变得太大而无法处理。我试图分解函数运行3次单独的时间,并生成3个单独的XML文件。我试图运行相同的查询3次,但最后每个都有一个不同的WHILE语句。我尝试使用rownum方法,但没有意识到你不能做rownum > x and rownum <y格式。有人有主意吗?以下是我尝试运行的代码片段:

SELECT *
FROM useradmin.VSED_UNVALIDATED_VW tbl_vsed_unvalidated
WHERE (rownum < 10001)

然后使用另一个查询:

SELECT *
FROM useradmin.VSED_UNVALIDATED_VW tbl_vsed_unvalidated
WHERE ((rownum > 10000)
AND rownum < 20001)

3 个答案:

答案 0 :(得分:1)

select * from 
( select col1, col2, row_number() over (order by col1) r from tbl_vsed_unvalidated)
where r between 10000 and 20001

答案 1 :(得分:0)

尝试这样的事情:

SELECT * FROM
  (SELECT *, rownum r FROM useradmin.VSED_UNVALIDATED_VW tbl_vsed_unvalidated)
WHERE r > 10001 AND r < 20001

您可以构建一个小功能来重用:

function select_limit($table, $min, $max) {
   $sql = "SELECT * FROM
            (SELECT *, rownum r FROM $table)
           WHERE r > $min AND r < $max";

   //return query result
}

答案 2 :(得分:0)

您正在寻找分页。它可以在oracle中完成。

要了解它,您应该阅读 rownum 伪列(如果您不想阅读比实际需要更多的数据)。

Oracle Doc

select *
  from (select *
          from (select ua.*, rownum r
                  from useradmin ua)
         where rownum < MAX_VALUE)
 where r > MIN_VALUE