Oracle ROWNUM語句相信大家都有一定的了解,下面就為您詳細介紹Oracle ROWNUM語句的使用方法,希望能對您能有所幫助。
偽列(pseudocolumn)ROWNUM 中包含有當前的行號。很多人在第一次試圖返回表中中間某段記錄子集時,都會發現下面這種方法行不通:
select * from all_objects where rownum between 30 and 49;
這種寫法之所以行不通,是因為 ROWNUM 列只有在記錄被取出或過濾時才會應用到記錄上。第一行在被取出時會被拋出,因為它的 ROWNUM 是1。然後,下一行被取出;它也會被拋出,因為它是新的“1”,以此類推,直到所有的行都被使用。這個查詢不會返回任何記錄。解決方法是在看到30到50之間的記錄時必須先取出1到30行的記錄:
select * from all_objects where rownum <= 49;
然後,你可以將它作為一個子查詢並過濾掉開始點之前的所有記錄(注意我必須為“rownum”提供一個別名才能編譯):
select * from (select rownumr,all_objects.* from all_objects where rownum <=
49) t
where t.r >= 30;
為了保證它的效率,不妨對這個限制使用綁定變量。這將使用所有此類請求在字面上完全相同,從而消除了在每次請求不同的范圍求時重新解析查詢:
select * from (select rownumr,all_objects.* from all_objects where rownum <=:min) t
where t.r >= :max;
注意 Oracle ROWNUM語句是在排序之後計算的,所以使用 ORDER BY 子句將得到新的記錄順序。然而,基於規則的優化器用 ROWNUM 來“短路”查詢,並在 ROWNUM 子句被滿足時返回記錄給下一部分查詢。
Oracle的分頁查詢語句基本上可以按照本文給出的格式來進行套用。