一、定义包
create
or
replace
package pg
is
-- Author : gjr
-- Created :
-- Purpose :
-- Public type declarations
TYPE T_CURSOR IS REF CURSOR ;
-- 分页
PROCEDURE GetPageData(
pageIndex integer , -- 当前页
pageSize integer , -- 每页记录数
tableName varchar2 , -- 表名
query varchar2 , -- where语句 和 order by 语句
totalCount out number , -- 总记录数
v_cur out T_CURSOR -- 返回当前页数据记录
) ;
end pg;
-- Author : gjr
-- Created :
-- Purpose :
-- Public type declarations
TYPE T_CURSOR IS REF CURSOR ;
-- 分页
PROCEDURE GetPageData(
pageIndex integer , -- 当前页
pageSize integer , -- 每页记录数
tableName varchar2 , -- 表名
query varchar2 , -- where语句 和 order by 语句
totalCount out number , -- 总记录数
v_cur out T_CURSOR -- 返回当前页数据记录
) ;
end pg;
二、定义包体
create
or
replace
package body pg
is
-- Author : gjr
-- Created :
-- Purpose : 分页
PROCEDURE GetPageData(
pageIndex integer , -- 当前页
pageSize integer , -- 每页记录数
tableName varchar2 , -- 表名
query varchar2 , -- where语句 和 order by 语句
totalCount out number , -- 总记录数
v_cur out T_CURSOR -- 返回当前页数据记录
)
AS
v_sql VARCHAR2 ( 5000 );
v_Plow number ;
v_Phei number ;
Psql varchar2 ( 5000 );
p_sql varchar2 ( 5000 );
v_tmp varchar2 ( 5000 );
v_TotalCount varchar2 ( 50 ); -- 总记录数
Begin
-- ------------------------------显示任意页内容
v_Phei : = pageIndex * pageSize ;
v_Plow : = v_Phei - pageSize + 1 ;
p_sql: = ' select t.* from ' || tableName || ' t where 1=1 ' || query || ' ' ; -- 要求必须包含rownum字段
Psql : = ' select rownum rn,a.* from ( ' || p_sql || ' ) a ' ;
v_sql : = ' select * from ( ' || Psql || ' ) where rn between ' || v_Plow || ' and ' || v_Phei;
v_tmp : = ' select count(*) as TotalCount from ( ' || p_sql || ' ) a ' ;
execute immediate v_tmp into v_TotalCount;
totalCount : = v_TotalCount;
open v_cur for v_sql;
End GetPageData;
end pg;
-- Author : gjr
-- Created :
-- Purpose : 分页
PROCEDURE GetPageData(
pageIndex integer , -- 当前页
pageSize integer , -- 每页记录数
tableName varchar2 , -- 表名
query varchar2 , -- where语句 和 order by 语句
totalCount out number , -- 总记录数
v_cur out T_CURSOR -- 返回当前页数据记录
)
AS
v_sql VARCHAR2 ( 5000 );
v_Plow number ;
v_Phei number ;
Psql varchar2 ( 5000 );
p_sql varchar2 ( 5000 );
v_tmp varchar2 ( 5000 );
v_TotalCount varchar2 ( 50 ); -- 总记录数
Begin
-- ------------------------------显示任意页内容
v_Phei : = pageIndex * pageSize ;
v_Plow : = v_Phei - pageSize + 1 ;
p_sql: = ' select t.* from ' || tableName || ' t where 1=1 ' || query || ' ' ; -- 要求必须包含rownum字段
Psql : = ' select rownum rn,a.* from ( ' || p_sql || ' ) a ' ;
v_sql : = ' select * from ( ' || Psql || ' ) where rn between ' || v_Plow || ' and ' || v_Phei;
v_tmp : = ' select count(*) as TotalCount from ( ' || p_sql || ' ) a ' ;
execute immediate v_tmp into v_TotalCount;
totalCount : = v_TotalCount;
open v_cur for v_sql;
End GetPageData;
end pg;