ORACLE 自定义分页存储过程
一、创建包
CREATE OR REPLACE PACKAGE PKG_JK_LAB_BASIC
IS
TYPE CURSOR_TYPE IS REF CURSOR; PROCEDURE SP_GET_PAGINATION (
pi_tableName in varchar2, --表名
pi_where in varchar2, --查询条件
pi_columns in varchar2, --查询列集合
pi_orderColumn in varchar2, --排序的列
pio_curPage in out Number, --当前页
pio_pageSize in out Number, --每页显示记录条数
po_totalRecords out Number, --总记录数
po_totalPages out Number, --总页数
po_cur out CURSOR_TYPE); END PKG_JK_LAB_BASIC;
二、创建包体
CREATE OR REPLACE PACKAGE BODY PKG_JK_LAB_BASIC
IS PROCEDURE SP_GET_PAGINATION
(pi_tableName in varchar2, --表名
pi_where in varchar2, --查询条件
pi_columns in varchar2, --查询列集合
pi_orderColumn in varchar2, --排序的列
pio_curPage in out Number, --当前页
pio_pageSize in out Number, --每页显示记录条数
po_totalRecords out Number, --总记录数
po_totalPages out Number, --总页数
po_cur out CURSOR_TYPE) --返回的结果集
IS
v_sql VARCHAR2(1000) := ''; --sql语句
v_startRecord Number(4); --开始显示的记录条数
v_endRecord Number(4); --结束显示的记录条数
v_where VARCHAR2(500) := '';
v_orderColumn VARCHAR2(200) := '';
v_columns VARCHAR2(200) := '';
BEGIN
--记录中总记录条数
v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || pi_tableName; v_where := TRIM(NVL(pi_where,''));
IF LENGTH(v_where)>0 THEN
v_where := ' WHERE ' || pi_where || ' ';
v_sql := v_sql || v_where;
END IF; v_orderColumn := TRIM(NVL(pi_orderColumn,''));
IF LENGTH(v_orderColumn)>0 THEN
v_orderColumn := ' ORDER BY ' || v_orderColumn || ' ';
END IF; EXECUTE IMMEDIATE v_sql INTO po_totalRecords; IF pio_pageSize <= 0 THEN
pio_pageSize := 10;
END IF; --根据页大小计算总页数
po_totalPages := CEIL( po_totalRecords / pio_pageSize); IF pio_curPage < 1 THEN
pio_curPage := 1;
END IF; IF pio_curPage > po_totalPages THEN
pio_curPage := po_totalPages;
END IF; --实现分页查询
v_startRecord := (pio_curPage - 1) * pio_pageSize + 1;
v_endRecord := pio_curPage * pio_pageSize;
v_columns := TRIM(NVL(pi_columns,'')); IF LENGTH(v_columns)>0 AND v_columns <> '*' THEN
v_sql := 'SELECT * FROM (SELECT '|| v_columns ||', ROWNUM RowNumber FROM ' ||
'(SELECT '|| v_columns ||' FROM ' || pi_tableName || v_where || v_orderColumn || '))'||
' WHERE RowNumber <= ' || v_endRecord || ' AND RowNumber >= ' || v_startRecord ;
ELSE
v_sql := 'SELECT * FROM (SELECT A.*, ROWNUM RowNumber FROM ' ||
'(SELECT * FROM ' || pi_tableName || v_where || v_orderColumn || ') A )'||
' WHERE RowNumber <= ' || v_endRecord || ' AND RowNumber >= ' || v_startRecord ;
END IF; DBMS_OUTPUT.put_line(v_sql); OPEN po_cur FOR v_sql; END SP_GET_PAGINATION; END PKG_JK_LAB_BASIC;
ORACLE 自定义分页存储过程的更多相关文章
- Oracle通用分页存储过程的创建与使用
Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结 ...
- Oracle 创建分页存储过程(转帖)
原贴地址:http://19880614.blog.51cto.com/4202939/1316560 ps:源代码还有很多错误,我修改了 ------------------------------ ...
- oracle高效分页存储过程(百万数据级)
create or replace procedure Pager( page in number,--数据页数,从1开始 pageSize in number,--每页大小 tableName nv ...
- Oracle数据库使用存储过程实现分页
注:本示例来源于韩顺平[10天玩转oracle数据库]视频教程 1.创建包同时创建游标 create or replace package pagingPackage is type paging_c ...
- Oracle分页存储过程及PLSQL中的调用脚本
撰写过程:网上搜集测试了好多的Oracle分页存储过程代码,经整理后终于通过测试,特分享给大家 测试步骤:1.运行创建包命令;2.运行创建存储过程命令;3.运行调用分页存储过程语句 测试环境:wind ...
- Oracle实践--PL/SQL综合之分页存储过程
Oracle PL/SQL分页的存储过程 Oracle,分页,存储过程三个词结合起来,来个综合点的小练习,运用之前的PL/SQL创建一个分页的存储过程,仅仅须要简单几步就可以. 1.声明一个引用游标 ...
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- C# DataGridView自定义分页控件
好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
随机推荐
- 大批量GPS坐标转百度坐标
一. 百度地图API大批量转换时有数量限制,一个一个转. 用到的方法接口 /** 源坐标 格式:经度,纬度;经度,纬度… 最多支持100个; 源坐标类型:默认为1,即GPS ...
- 选择流程—— switch if else结构
一.switch switch(表达式){ case 常量1: 语句; break; case 常量2: 语句; break; … default; 语句; } 例题:运用switch结构实现购物管理 ...
- 20151208Study
20151208-----------------------------------------------------* Her main interest now is raising her ...
- C# 中科学计数法转成正常值
抓取数据的时候碰到科学技术法,查了一些资料,直接贴代码 /// <summary> /// 数字科学计数法处理 /// </summary> /// <param nam ...
- 一个CURL
CURL curl是利用url语法规则来传输文件,数据的工具,主要实现和服务器中网页,资源传输的工具.这里有一个关于感冒还没好的段子. 1.去phpini开启curl扩展,重启阿帕奇或者配置环境变量或 ...
- Q_OBJECT
所有QObject的派生类在官方文档中都推荐在头文件中放置宏Q_OBJECT,那么该宏到底为我们做了哪些工作?在qobjectdef.h中有下面的代码: #define Q_OBJECT \ publ ...
- 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
两种原因: 第一种为程序的运行以平台系统位数不匹配,第二种则是该死的VS整出来的... 一般在下面三种情景下会发生. 1.64位系统上C#调用32位的C++ *.dll 2.64位系统上IIS发布含有 ...
- vs2015 无法启动IIS Express Web服务器
今天在VS2015上装了 之后无法启动IIS Express Web服务器. 然后我去查看了windows日志发现vs创建的虚拟目录不见了(至于是不是以上原因导致的没去查明) 然后在vs2015中点击 ...
- OD使用教程12
载入程序输入关键字: 双击进入程序 仔细看发现并没有跳转直接跳到这个mov,往上看发现retn上面有一个push,在这种编写手法当中这种组合相当于一个jmp, 跳到离它最近的一个值(在这就是004A5 ...
- 什么是F#
作者:Alexey Bykov@EastBancTech原文:http://bit.ly/1nGroOz翻译:kk1982.com转载请注明 简介 F#是由微软研究团队为.NET平台研发的一种现代函数 ...