Oracle通用大資料量儲存過程分頁修正版

2021-08-02 04:09:06 字數 1536 閱讀 2835

通用大資料量儲存過程分頁」**在本地使用過程中發現有點不適合專案需求,所以抽時間修正了下,具體的不完善的地方表現為:

1、在第一頁搜尋的時候可以正常搜尋出資訊,但是如果跳轉到地2頁以後的分頁上再搜尋的時候就會出現找不到記錄;

2、在比較大的的分頁上搜尋出多條記錄時,如果搜尋出來的記錄的總頁數比當前頁碼小,也不顯示記錄,因為搜尋出的總記錄的總頁數比當前頁數小;

下面修正版的分頁儲存過程修正了上面的錯誤,在此記錄下,便於以後備用。

create or replace package body pager is

procedure sp_page

(p_pagesize int,

p_pageno int,

p_sqlselect varchar2,

p_sqlcount varchar2,

p_outrecordcount out int,

p_outcursor out refcursortype)as

v_sql varchar2(3000); 

v_count int;           

--總記錄數

v_totalpage int;     --總頁數

v_curpage int;       --當前頁碼

v_heirownum int;

v_lowrownum int;

begin

execute immediate p_sqlcount into v_count;

p_outrecordcount := v_count;

v_curpage := p_pageno;

v_totalpage := floor(v_count / p_pagesize);

if mod(v_count,p_pagesize) != 0 then

v_totalpage := v_totalpage + 1;

end if;

if v_totalpage <= 0 then

v_totalpage := 1;

end if;

if v_totalpage < p_pageno then

v_curpage := v_totalpage;

end if;

v_heirownum := v_curpage * p_pagesize;

v_lowrownum := v_heirownum - p_pagesize + 1;

dbms_output.put_line(v_curpage);

v_sql := 'select *

from (

select a.*, rownum rn

from ('|| p_sqlselect ||') a

where rownum <= '|| to_char(v_heirownum) || '

) bwhere rn >= ' || to_char(v_lowrownum);

open p_outcursor for v_sql;

end sp_page;

end pager;

Oracle大資料量分頁通用儲存過程

v sql select from select a.rownum rn from p sqlselect a where rownum to char v heirownum bwhere rn to char v lowrownum 注意對rownum別名的使用,第一次直接用rownum,第二次...

Oracle大資料量遷移

prompt 生成歷史表,使用nologging create table his test nologging as select from test prompt 檢驗新舊表的資料量是否一致 select count 1 from test select count 1 from his tes...

大資料量演算法

給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 位圖思想解法 include stdio.h include stdlib.h include memory.h define max num 4294967295 int mai...