常聽到有人問 關於資料分頁的問題,之前在其他版上有看過
整理一下內容,如下.....
oracle 分頁顯示的sql
Oracle不支持類似於 MySQL 中的 limit. 但你還是可以
rownum來限制返回的結果集的行數.
如果你只希望返回前十行紀錄,你可以這樣寫:
但是下面的語句是不對的:
這是因為 Oracle 認為這個條件不成立,所以沒有返回。
你應該這樣寫:
這樣的話error21h兄提供的兩種方式都可以適用 ^^
另外如果有order by的話要怎麼辦呢?我查過網路上的文章後,得到以下的解法
參考連結: http://blog.joycode.com/percyboy/archive/2004/09/14/33445.aspx
不過這些SQL最好能寫在外部設定檔裡面,這樣如果要切換成SQL Server的話只要改設定檔就好,不用改程式
整理一下內容,如下.....
oracle 分頁顯示的sql
Oracle不支持類似於 MySQL 中的 limit. 但你還是可以
rownum來限制返回的結果集的行數.
如果你只希望返回前十行紀錄,你可以這樣寫:
1 | SELECT * FROM table WHERE ROWNUM<10; |
但是下面的語句是不對的:
1 | SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100; |
這是因為 Oracle 認為這個條件不成立,所以沒有返回。
你應該這樣寫:
1 | SELECT * FROM table WHERE ROWNUM<101; minus SELECT * FROM table WHERE ROWNUM<91; |
error21h wrote:
但是下面的語句是不對的:
1 SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100;
這是因為 Oracle 認為這個條件不成立,所以沒有返回。
你應該這樣寫:
1
2
3
4
5 SELECT * FROM table WHERE ROWNUM<101; minus SELECT * FROM table WHERE ROWNUM<91;
上面那個SQL不對的原因應該是沒有加上=,只要改成以下的方式就可以了
1 | SELECT * FROM table WHERE ROWNUM>=90 AND ROWNUM<=100; |
這樣的話error21h兄提供的兩種方式都可以適用 ^^
另外如果有order by的話要怎麼辦呢?我查過網路上的文章後,得到以下的解法
1 | SELECT * FROM (SELECT A.*, rownum r FROM -- 這裡的SQL可以改成你真正要執行的SQL (SELECT * FROM Articles ORDER BY PubTime DESC ) A -- -- 用上面的SQL得回來的集合,使用rownum去比對,這樣rownum就會從這 個集合的第一筆資料開始往下計算,所以這邊是抓取前100筆 WHERE rownum <= 100 ) B -- B集合總共有A集合和r(rownum)的資料,這裡是抓取大於第90筆的 WHERE r > 90; |
參考連結: http://blog.joycode.com/percyboy/archive/2004/09/14/33445.aspx
不過這些SQL最好能寫在外部設定檔裡面,這樣如果要切換成SQL Server的話只要改設定檔就好,不用改程式