天天看點

java oracle分頁查詢語句_oracle 分頁語句

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

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

java oracle分頁查詢語句_oracle 分頁語句

SELECTOBJ_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 FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum >= 1)

where row_id < 26

java oracle分頁查詢語句_oracle 分頁語句

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

java oracle分頁查詢語句_oracle 分頁語句

SELECTOBJ_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 FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum >= 26)

where row_id < 51

java oracle分頁查詢語句_oracle 分頁語句

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

不能對ROWNUM使用>(大于1的數值)、>=(大于或等于1的數值)、=(大于或等于1的數值),否則無結果

-- 是以直接用隻能從1開始

-- rownum >10 沒有記錄,因為第一條不滿足去掉的話,第二條的rownum又成了1,是以永遠沒有滿足條件的記錄。

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

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

java oracle分頁查詢語句_oracle 分頁語句

SELECTOBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY

FROM( SELECT m.*,rownum row_id

FROM(SELECTOBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY

FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum <51)

where row_id >= 26

java oracle分頁查詢語句_oracle 分頁語句

将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;