2014-07-23 47 views
1

我有一個大型Oracle數據庫,有大量需要處理的記錄。我正在驗證PHP中的數據,然後從驗證的數據數組中生成XML代碼。由於大量的結果,XML文件變得太大而無法處理。我試圖分解功能來運行3個不同的時間,並生成3個獨立的XML文件。我試圖運行相同的查詢3次,但每個結尾都有一個不同的WHILE語句。我嘗試使用rownum方法,但沒有意識到你不能做rownum > x and rownum <y格式。有人有主意嗎?這裏是我試圖運行的代碼片段:如何從Oracle數據庫中查詢有限數量的行?

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) 

回答

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 
} 
+0

謝謝,這似乎運作良好 – ITProblems

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

您正在尋找分頁。它可以像這樣在oracle中完成。

要了解它,你應該閱讀關於rownum pseudocolumn(如果你只是不想讀取比實際需要更多的數據)。

Oracle Doc

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