一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - oracle 分頁問題解決方案

oracle 分頁問題解決方案

2019-11-15 15:44oracle教程網 Oracle

測試說分頁查詢貌似不起作用,翻到第4頁以后,看到的數據結果都是相同的,此等問題應該如何解決,本文將詳細介紹

昨天做完項目后讓測試測試了一把,測試說分頁查詢貌似不起作用,翻到第4頁以后,看到的數據結果都是相同的。 
當時我就覺得很納悶,不可能啊,分頁組件應該是好的,咋可能有問題呢。帶著疑問,我打開了自己的ide,在自己的機器上跑了一把,果然有問題。 
有問題就要找問題: 
首先把2條查詢結果相同的sql打印出來到數據庫中執行: 
sql1: 

復制代碼代碼如下:

select * 
from (select t.*, rownum rn 
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode 
from (select t.eid t_e_id, 
t.ename t_e_name, 
t.etel t_e_tel, 
t.areaid t_e_areacode, 
t.biz_delete_time, 
decode(areaid, '0730', '0', '1') orderseq 
from vr_enterprise t 
where t.eid not in (select eid from t_biz_erelation)) 
order by orderseq, biz_delete_time nulls last) t 
where rownum < 25) 
where rn >= 19 
sql2: 
select * 
from (select t.*, rownum rn 
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode 
from (select t.eid t_e_id, 
t.ename t_e_name, 
t.etel t_e_tel, 
t.areaid t_e_areacode, 
t.biz_delete_time, 
decode(areaid, '0730', '0', '1') orderseq 
from vr_enterprise t 
where t.eid not in (select eid from t_biz_erelation)) 
order by orderseq, biz_delete_time nulls last) t 
where rownum <18) 
where rn >= 12 


結果顯示大多數行是相同的。 
為了找到問題所在,只有先一步一步的精簡化sql,看在哪一步出的問題。 
于是找到了,問題出現在where rownum<18的時候數據改變了,為什么加了個where條件結果就會變呢? 
表示想不通啊。。。。。 
沒辦法,只好baidu了,baidu了半天,都沒人給個解釋啊。。。。。 
后來同事說,換個寫法試試,于是改了另一種寫法,如下: 

復制代碼代碼如下:

select * 
from (select t.*, rownum rn 
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode 
from (select t.eid t_e_id, 
t.ename t_e_name, 
t.etel t_e_tel, 
t.areaid t_e_areacode, 
t.biz_delete_time, 
decode(areaid, '0730', '0', '1') orderseq 
from vr_enterprise t 
where t.eid not in (select eid from t_biz_erelation)) 
order by orderseq, biz_delete_time nulls last) t)m 
where m.rn >= 1 and m.rn <25 


這個方法果然湊效,湊效是湊效,關鍵是為什么前面那種方法不行呢?抓問題要刨根問底。 
看來baidu不行,得換google搜索了。google搜索總是喜歡被china government墻掉,沒辦法,網上只好找了個chrome插件才解決了。 
找呀找找呀找,在oracle的ask tom上,tom詳細的介紹了rownum的用法,在這里http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html 
One important thing about using this pagination query is that the ORDER BY statement should order by something unique. If what you are ordering by is not unique, you should add something to the end of the ORDER BY to make it so. 
看到這樣一句話,原來用order by的時候還需要增加order by的唯一性,不然rownum就會有問題。哇哈哈哈,太開心了,功夫不費有心人呀,找到問題的癥結了,當然就好解決了。 
這權當是一次排錯的經歷,特此記錄下來,看來google還是比baidu強大很多啊,以后要好好學英文,不然遇到問題沒發解決。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99国内精品久久久久久久黑人 | 天堂伊人| 手机在线观看网站免费视频 | 久久强奷乱码老熟女 | 舔比小说 | 欧美亚洲国产精品久久第一页 | 本土自拍 | 成人欧美一区二区三区黑人 | 天作谜案免费完整版在线观看 | 幸福草电视剧演员表介绍 | 免费港剧在线观看港剧 | 亚洲高清中文字幕精品不卡 | 国产在线观看91精品一区 | 97影视| 国产精品青青在线观看香蕉 | 亚洲成人影院在线 | 70老妇牲交毛片 | 乳色吐息讲的是什么 | 鸭子玩富婆流白浆视频 | 男人疯狂擦进女人下面 | chinese老太grandma| 国产欧美精品专区一区二区 | 亚洲一区二区三区免费视频 | 爽好紧别夹宝贝叫大声点护士 | 亚洲xxxxxhd奶水女人 | 教练你好大轻点漫 | 日本国产最新一区二区三区 | 精品综合久久久久久88小说 | 2021国产精品视频一区 | 亚洲第一福利视频 | 免费特黄一级欧美大片 | 和两个男人玩3p好爽视频 | 国产成人免费高清激情视频 | 日韩精品福利视频一区二区三区 | 四虎影院在线免费 | 红杏网| 天天爽天天 | 久久精品国产视频澳门 | 国产精品亚洲精品青青青 | 欧美最猛性xxxxx男男 | 欧美成人在线影院 |