本文档主要是介绍针对oracle数据库中利用包和存储过程来实现分页获取数据的内容。其实该存储过程的主题思想及主要实现我也是从网上找的,自己做了整合。
包括包头声明和包体实现部分以及C#代码具体调用部分,共大家参考并提出改进意见。
本包中包括两个分页的存储过程,一个是通用的,而另一个是比较具体的。分页主要用到了游标和pl/sql中的rownum的概念。
1 声明:
CREATE OR REPLACE PACKAGE PACK_PAGE IS
TYPE 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, --总记录数