createorreplace 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;
二、定义包体
createorreplace 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;