Oracle分頁問題

來源:互聯網
上載者:User

標籤:完成   nbsp   rom   oracle   conf   rownum   class   student   ora   

今天在公司遇到一個分頁查詢的bug,查詢第一頁可以查詢到資料,下面也顯示的沒有問題!查詢第二頁時,顯示已經載入完成,但是頁面沒有問題!

通過Debug調試,發現第一頁查詢到的資料沒有問題,第二頁時,查不到資料!

第一頁時,控制台列印的sql語句:

 

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM     ( SELECT m.*,rownum row_id        FROM (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM WKF_BUSINESS_CONFIG ) m         WHERE rownum >= 1) where row_id < 26 

 

第二頁時,控制台列印的sql語句:

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM     ( SELECT m.*,rownum row_id        FROM (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM WKF_BUSINESS_CONFIG ) m         WHERE rownum >= 26) where row_id < 51 

通過分析和查詢oracle分頁的知識,發現是SQL語句有問題!

不能對ROWNUM使用>(大於1的數值)、>=(大於或等於1的數值)、=(大於或等於1的數值),否則無結果
-- 所以直接用只能從1開始
-- rownum >10 沒有記錄,因為第一條不滿足去掉的話,第二條的rownum又成了1,所以永遠沒有滿足條件的記錄。

正好,查詢第二頁的時候,上面的sql語句犯了這個問題!

既然不能>=(大於或等於1的數值),那我就讓rownum<大於1的數!

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM      ( SELECT m.*,rownum row_id        FROM             (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY              FROM WKF_BUSINESS_CONFIG ) m              WHERE rownum <51) where row_id >= 26 

 

將sql語句改成這樣時,按照要求可以查詢到資料!

既然遇到了Oracle分頁查詢的問題,正好複習下Oracle分頁的相關知識!

在Mysql中,分頁查詢很簡單!    分頁查詢使用的是limit關鍵字進行查詢。它後面有兩個參數

第一個參數是起始的位置,第二個參數是每頁需要顯示的條目數。

舉例:商品表中有10條記錄,現在需要進行分頁顯示,每頁顯示3條資料。現在需要查看第二頁的資料。那麼應該使用的sql語句是:

    select * from product limit 3,3;                     第一個參數計算的公式為:(查詢的頁數-1)*每頁顯示條目數    即 (2-1)*3=3

在Oracle中分頁就沒有那麼簡單!Oracle中是通過rownum實現分頁查詢的!

 

不能對ROWNUM使用>(大於1的數值)、>=(大於或等於1的數值)、=(大於或等於1的數值),否則無結果
所以直接用只能從1開始
rownum >10 沒有記錄,因為第一條不滿足去掉的話,第二條的rownum又成了1,所以永遠沒有滿足條件的記錄。
select * from student where rownum>=1;

 

如果想要用rownum不從1開始,需按下面方法使用
select a1.* from (select student.*,rownum rn from student) a1 where rn >5

分頁查詢一
select * from (select a1.*,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;

 

分頁查詢二
select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;

 

分頁查詢三
select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;

 

 

Oracle分頁問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.