oracle分頁以及rownum rowid的使用

2021-09-01 10:36:05 字數 2781 閱讀 3230

分頁儲存過程:

1.根據rowid來分,執行時間0.03秒

create or replace procedure del_page(

cur_page in number,

num_page in number)is

cursor cursor_test is

select * from userinfo where rowid in(select rid from (select rownum rn,rid from(select rowid rid,userinfo.* from

userinfo) where rownum<=cur_page*num_page) where rn>(cur_page-1)*num_page);

begin

for row_test in cursor_test loop

dbms_output.put_line(row_test.customerid||'||'||row_test.customername

||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);

end loop;

end;

2.按分析函式來分,執行時間1.01秒

create or replace procedure del_page1(

cur_page in number,

num_page in number)is

cursor cursor_test is

select * from (select t.*,row_number() over(order by customerid desc) rk from userinfo t)

where rk<=cur_page*num_page and rk>(cur_page-1)*num_page;

begin

for row_test in cursor_test loop

dbms_output.put_line(row_test.customerid||'||'||row_test.customername

||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);

end loop;

end;

3.按rownum來分,執行時間0.1秒

create or replace procedure del_page2(

cur_page in number,

num_page in number)is

cursor cursor_test is

select t.*,rownum from

userinfo t

where rownum<=cur_page*num_page and rownum>(cur_page-1)*num_page;

begin

for row_test in cursor_test loop

dbms_output.put_line(row_test.customerid||'||'||row_test.customername

||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);

end loop;

end;

1. rownum 的使用

rownum 是乙個序列,是 oracle 資料庫從資料檔案或緩衝區中讀取資料的順序。它取得第 一條記錄則 rownum 值為 1,第二條為 2,依次類推。如果你用》,>=,=,between...and 這些條 件,因為從緩衝區或資料檔案中得到的第一條記錄的 rownum 為 1,則被刪除,接著取下條, 可是它的 rownum 還是 1,又被刪除,依次類推,便沒有了資料。

使用 select 語句返回的結果集,若希望按特定條件查詢前 n 條記錄,可以使用偽列 rownum。 rownum 是對結果集加的乙個偽列,即先查到結果集之後再加上去的乙個列 (強調: 先要有結果集)。簡單的說 rownum 是符合條件結果的序列號。它總是從 1 開始排起的。 使用 rownum 時,只能使用<、<=、!=符號。

1 rownum 是從 1 開始,1 以上的自然數在 rownum 做等於判斷時認為都是 false 條件,所以無法查到 rownum = n(n>1 的自然數) 。

2 rownum 對於大於某值的查詢條件 如果想找到從第二行記錄以後的記錄,當使用 rownum>2 是查不出記錄的,原因是由於 rownum 是乙個總是從 1 開始的偽列,oracle 認為 rownum> n(n>1 的自然

數)這種條件依 舊不成立,所以查不到記錄。 那如何才能找到第二行以後的記錄呢?可以使用子查詢方法來解決。注意子查詢中的 rownum 必須要有別名,否則還是不會查出記錄來,這是因為 rownum

不是某個表的列,如 果不起別名的話,無法知道 rownum 是子查詢的列還是主查詢的列。

3 rownum 對於小於某值的查詢條件 如果想找到第三條記錄以前的記錄,當使用 rownum<3 是能得到兩條記錄的。顯然 rownum 對於 rownum1 的自然數)的條件認為是成立的,所以可以找到記錄。

2. rowid 的使用——快速刪除重複的記錄

rowid 是資料的詳細位址, 通過 rowid, oracle 可以快速的定位某行具體的資料的位置。 rowid 可以分為物理 rowid 和邏輯 rowid 兩種。普通的表中的 rowid 是物理 rowid,索 引組織表(iot)的 rowid 是邏輯 rowid。 當表中有大量重複資料時,可以使用 rowid 快速刪除重複的記錄。

oracle分頁以及mysql分頁

oracle分頁 分頁邏輯 第三層限制最小記錄數 第二層限制最大記錄數 第一層做條件限制 分頁例子 select from select from select rownum as rnum,empno from emp where rnum 10 where rnum 5 mysql分頁 sele...

oracle實現分頁以及效能分析

分頁查詢格式 select from select a.rownum rn from select from table name a where rownum 40 where rn 21 其中最內層的查詢select from table name表示不進行翻頁的原始查詢語句。rownum 40...

Oracle分頁儲存過程以及C 呼叫

1 分頁儲存過程 首先需要新建乙個包,至於為什麼要這麼做,我沒有深究,如有童鞋知道的話,只會一聲哈 建立包 create or replace package pck system is type t cursor is ref cursor end pck system 建立儲存過程 create...