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