今天突然想到rownum可以解決分頁問題,於是做了各種實驗,找個幾個文章,最後有了一定成果。
現有表tablename,含有字段showorder,要求提取showorder的第11行到20行數據。
用語句select rownum r,a.* from tablename a order by showorder進行查詢的時候會發現結果集中rownum是在排序之前賦的值,因此如果需要按showorder提前的話應該先將tablename按showorder排序,將排序後的結果集按rownum提取。
用語句SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 可以查出前20條,但如果過濾條件變成rownum<=20 and rownum >=10,就會發現結果集一條數據都沒有,因為rownum是提取數據,將數據操作完成之後再進行標記行號,關於這點,有個作者寫的很好http://blog.csdn.net/greenappple/article/details/6872660,大家可以看看。
剩下的操作是將標記好行號的前20條數據提取後十條。
SELECT * FROM (SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 ) WHERE r >= 11;
上面的語句用plsql執行時用了0.078秒,等同於plsql查詢上千行的表時只查處了前十條的時間。
網上有很多好文章寫著塊的,此處只記載了適用於我的方面。