程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE ROWNUM語句的使用

ORACLE ROWNUM語句的使用

編輯:Oracle數據庫基礎

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的分頁查詢語句基本上可以按照本文給出的格式來進行套用。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved