Oracle数据分页存储过程实现.docx
文本预览下载声明
本包中包括两个分页的存储过程,一个是通用的,而另一个是比较具体的。分页主要用到了游标和pl/sql中的rownum的概念。1 声明:CREATE OR REPLACE PACKAGE PACK_PAGE ISTYPE PAGE_CURSOR IS REF CURSOR;--定义游标PROCEDURE PAGINATION_PROC(P_TABLENAME VARCHAR2, --表名 P_PAGEINDEX NUMBER, --当前页码 P_PAGESIZE NUMBER, --每页记录数 P_PAGECOUNT OUT NUMBER, --总页数 P_TOTALCOUNT OUT NUMBER, --总记录数 v_CURSOR OUT PACK_PAGE.PAGE_CURSOR, --返回的结果集 P_WHERE VARCHAR2, --查询条件 P_ORDER_KEY VARCHAR2, --排序关键字(asc desc) P_ORDER_COLUMN VARCHAR2 --排序字段 ) ; PROCEDURE PAGINATION_WAP_DETAIL_PROC( P_PAGEINDEX NUMBER, --当前页码 P_PAGESIZE NUMBER, --每页记录数 P_WHERE VARCHAR2, --查询条件 P_SELECTCONTENT VARCHAR2, --查询的内容 P_PAGECOUNT OUT NUMBER, --总页数 P_TOTALCOUNT OUT NUMBER, --总记录数 V_CURSOR OUT PACK_PAGE.PAGE_CURSOR --返回的结果集 );END PACK_PAGE;2:具体实现:CREATE OR REPLACE PACKAGE BODY PACK_PAGE IS PROCEDURE PAGINATION_PROC(P_TABLENAME VARCHAR2, --表名 P_PAGEINDEX NUMBER, --当前页码 P_PAGESIZE NUMBER, --每页记录数 P_PAGECOUNT OUT NUMBER, --总页数 P_TOTALCOUNT OUT NUMBER, --总记录数 v_CURSOR OUT PACK_PAGE.PAGE_CURSOR, --返回的结果集 P_WHERE VARCHAR2, --查询条件 P_ORDER_KEY VARCHAR2, --排序关键字(asc desc) P_ORDER_COLUMN VARCHAR2 --排序字段 ) IS V_PAGEINDEX NUMBER; --当前页 V_PAGESIZE NUMBER; --每页记录数 V_STARTCUR NUMBER; --游标开始 V_ENDCUR NUMBER; --游标结束 V_SQL VARCHAR2(2000); --保存sql的变量 BEGIN V_SQL := select count(*) from || P_TABLENAME; IF P_WHERE IS NOT NULL OR P_WHERE THEN V_SQL := V_SQL || where || P_WHERE; END IF; EXECUTE IMMEDIATE V_SQL INTO P_TOTALCOUNT; --查询总记录数 P_PAGECOUNT := CEIL(P_TOTALCOUNT / P_PAGESIZE); --计算总页数 V_PAGESIZE := P_PAGESIZE; IF V_PAGESIZE 0 THEN --判断当前页大小否小于0 V_PAGESIZE := 0; END IF; V_PAGEINDEX := P_PAGEINDEX; IF V_PAGEINDEX 0 THEN --判断当前页是否小于0 V_PAGEINDEX := 0; END IF; IF V_PAGEINDEX P_PAGECOUNT THEN --判断当前页是否超过最大页 V_PAGEINDEX := P_PAGECOUNT; END IF; V_STARTCUR := (V_PAGEINDEX - 1) * V_PAGESIZE + 1; --计算游标开始位置 V_ENDCUR := V_PAGEINDEX * V_PAGESIZE; --计算游标结束位置 V_SQL := select * from (select rownum,t.* from (select * from || P_TABLENAME; --sql语句的开始部分 IF P_WHERE IS NOT NULL OR P_WHERE THEN --判断是否有查询的条件传来
显示全部