帶排序的oracle分頁儲存過程

2021-04-26 13:27:30 字數 2148 閱讀 4564

輸入order by 的sqeuence是,應該為「 desc」或者「 asc」

若輸入兩個order by則,v_order_field=" a[sequence] ,order by b "

create or replace procedure tablepage_select(v_page_size  int, --the size of a page of list

v_current_page int, --the current page of list

v_table_name varchar2, --the talbe name

v_order_field varchar2,--the order field

v_order_sequence varchar2,--the order sequence should by "_desc"or "_asc",_is blank.

--v_sql_select  varchar2, --the select sql for procedure

--v_sql_count  varchar2, --the count sql for procedure

--v_out_recordcount out int, --the num of return rows

p_cursor out refcursor_pkg.return_cursor) as

v_sql     varchar2(3000); --the sql for select all rows of list

v_sql_count  varchar2(3000); --the count sql for procedure

v_sql_order  varchar2(2000); --the order of list

v_count    int; -- the amount rows fo original list

v_endrownum  int; --the end row num of the current page

v_startrownum int; --the start row num of the current page

begin

----set the order of list

if v_order_field!='no' then

v_sql_order :=' order by '|| v_order_field ||' '||v_order_sequence;

else

v_sql_order :='';

end if;

----catch the amount rows of list

v_sql_count:='select count(rownum) from '||v_table_name;

execute immediate v_sql_count into v_count;

-- v_out_recordcount := v_count;

----set the value of start and end row

if v_order_sequence='desc' then

v_endrownum:=v_count-(v_current_page-1)*v_page_size;

v_startrownum:=v_endrownum - v_page_size + 1;

else

v_endrownum:= v_current_page * v_page_size;

v_startrownum := v_endrownum - v_page_size + 1;

end if;

----the sql for page slide

v_sql := 'select * from (select '||v_table_name||'.*, rownum rn from '||v_table_name||' where rownum <= ' ||

to_char(v_endrownum) ||' '|| v_sql_order||') where rn >= ' ||

to_char(v_startrownum)||' '||v_sql_order;

open p_cursor for v_sql;

end tablepage_select;

帶排序的oracle分頁儲存過程

create or replace package pager istype curs is ref cursor procedure pagination inpagesize in integer,每頁記錄數 inpageindex in integer,當前頁數 intablename in ...

sql分頁儲存過程,帶求和 排序

create procedure dbo sp tbtest query pagesize int,每頁多少條記錄 pageindex int 1,指定當前為第幾頁 pagecount int output,返回總頁數 recordcount int output,記錄總和 orderfield v...

oracle分頁儲存過程

page slide procedure author robert.c time 2006.11.17 create or replace procedure tablepage select v page size int,the size of a page of list v current...