2008年8月22日 星期五

Oracle 學習(4) SQL Paging

在 SQL Paging 的功能上,一直「感覺」Oracle 會比較強。主要是之前 SQL Server 2000 與 Oracle 7 的印象。
但在 SQL Server 2005 之後呢?就沒有比較過了。
舉例來說,在 SQL Server 2005 ,可以使用下面的語法
select * from 
( 
   select *, ROW_NUMBER() over(order by invoicenumber) as rn from B2CInvoice 
) a 
where a.rn between 21 and 30 
SQL Server 2000的語法就不說了,是很差的,而且並沒有通用的版本。
那 Oracle 呢?我現在只找到如下的方法,看起來比sql server 2005 的麻煩
SELECT * FROM
     (
     SELECT A.*, rownum r
     FROM
          (
          SELECT * FROM B2CINVOICE
          ORDER BY invoiceNumber
          ) A
     WHERE rownum <= 30
     ) B
WHERE r >= 21;
注意到,下面的是沒有資料回傳的,也就是錯誤的查詢結果。雖然看起來比較直覺而且易懂
     SELECT A.*, rownum r
     FROM
          (
          SELECT * FROM B2CINVOICE
          ORDER BY invoiceNumber
          ) A
     WHERE rownum >= 21 and rownum <=30

1 則留言:

匿名 提到...

oracle這種分頁方式效能不怎好

Share with Facebook