Oracle資料庫中呼叫ROWNUM分頁失敗

2021-09-25 21:13:05 字數 986 閱讀 2618

在oracle資料庫中進行分頁操作,發現一些情況取不到資料的情況,例如:

-- 已知t_test表中有70餘條資料,現在對錶中資料進行查詢操作。

-- 下面情況查詢結果為空

select *

from t_test

where rownum > 5 and rownum <= 10

-- 下面情況查詢結果為空

select *

from t_test

where rownum >= 5

-- 下面情況查詢結果卻不為空

select *

from t_test

where rownum <= 5

rownum是基於查詢結果進行排序的,也即是說它從資料集或者快取中取出資料,進行從1到n的編號,判斷當前的rownum滿不滿足過濾要求,滿足資料就留下,不滿足就再取資料。因為結果集是不固定的,再取資料時,rownum的計數又重新開始的計數。這就是為什麼我們取小於的時候可以取到資料,大於的時候取不到。例如rownum>=5,開始資料的rownum為1,不滿足過濾條件,再重新取資料,同時rownum又重新從1開始計數,一直下去永遠取不出rownum>=5的資料。

解決方法:在分頁查詢之前將資料集固定住。

通過一次巢狀查詢,將待分頁的資料集固定住,再進行分頁查詢。

--將結果集中的rownum固定住,命名為ro,在外查詢中通過ro實現分頁查詢

select *

from(

select rownum as ro, t.*

from t_test t

) fwhere f.ro > 5 and f.ro <= 10

select *

from(

select rownum as ro, t.*

from t_test t

) fwhere f.ro >= 5

資料庫 Oracle中建立資料庫

create database lihua 網上的說法是 oracle中的例項只對應乙個資料庫,出現此種情況說明oracle資料庫處於mount 裝載 或open狀態,需要使用startup nomount語句進行狀態更改,或者是直接使用dbca的圖形介面來建立 注 經測試,startup nomo...

JPA如何呼叫oracle資料庫中的儲存函式?

因系統需求,需要呼叫oracle資料庫中的儲存函式,在網上找了許多篇文章都沒有滿足我的條件,返回值和out值同時能獲取到,jpa的api中貌似沒有,反正我是沒找到,後來同事找的乙個網頁 上找到了解決方法,就是通過jpa來呼叫jdbc的api來實現這個功能,下面就是 session session e...

oracle資料庫中sql notfound的用法

sql notfound 是乙個布林值。與最近的sql語句 update,insert,delete,select 發生互動,當最近的一條sql語句沒有涉及任何行的時候,則返回true。否則返回false。這樣的語句在實際應用中,是非常有用的。例如要update一行資料時,如果沒有找到,就可以作相應...