程序包头

create or replace package PCK_Pager is

type T_Curor is ref Cursor;

Procedure GetRecordByPage

(

p_tableName        in  varchar2,   --表名

p_strWhere         in out  varchar2,   --查询条件

p_orderColumn      in  varchar2,   --排序的列(如:ID desc,Name asc)

p_curPage          in out  Number,  --当前页

p_pageSize         in out  Number,  --每页显示记录条数

p_fields           in  varchar2,   --要查询的列

p_totalRecords     out Number,     --总记录数

p_totalPages       out Number,     --总页数

v_cur              out T_Curor     --返回的结果集

);

end PCK_Pager;

程序包体:

create or replace package body PCK_Pager is

PROCEDURE GetRecordByPage

(p_tableName        in  varchar2,   --表名

p_strWhere         in out  varchar2,   --查询条件

p_orderColumn      in  varchar2,   --排序的列(如:ID desc,Name asc)

p_curPage          in out  Number,     --当前页

p_pageSize         in out  Number,     --每页显示记录条数

p_fields           in  varchar2,   --要查询的列

p_totalRecords     out Number,     --总记录数

p_totalPages       out Number,     --总页数

v_cur              out T_Curor)    --返回的结果集

IS

v_sql VARCHAR2(8000) := '';      --sql语句

v_startRecord Number(4);         --开始显示的记录条数

v_endRecord Number(4);           --结束显示的记录条数

BEGIN

-- 条件的转换

if instr(lower(trim(p_strWhere)),'and ') <> 1 then

p_strWhere := ' and ' || p_strWhere;

end if;

--记录中总记录条数

v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' where (1=1) ';

IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN

v_sql := v_sql || p_strWhere;

END IF;

EXECUTE IMMEDIATE v_sql INTO p_totalRecords;

--验证页面记录大小

IF p_pageSize < 0 THEN

p_pageSize := 0;

END IF;

--根据页大小计算总页数

IF MOD(p_totalRecords, p_pageSize) = 0 THEN

p_totalPages := trunc(p_totalRecords / p_pageSize);

ELSE

p_totalPages := trunc(p_totalRecords / p_pageSize) + 1;

END IF;

--验证页号

IF p_curPage < 1 THEN

p_curPage := 1;

END IF;

IF p_curPage > p_totalPages THEN

p_curPage := p_totalPages;

END IF;

--实现分页查询

v_startRecord := (p_curPage - 1) * p_pageSize + 1;

v_endRecord := p_curPage * p_pageSize;

v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM ' ||

'(SELECT '|| p_fields ||' FROM ' || p_tableName;

IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN

v_sql := v_sql || ' WHERE (1=1) ' || p_strWhere;

END IF;

IF p_orderColumn IS NOT NULL or p_orderColumn <> '' THEN

if instr(lower(p_orderColumn),'order by ') = 0 then

v_sql := v_sql || ' order by ' || p_orderColumn || ' ';

else

v_sql := v_sql || ' ' || p_orderColumn || ' ';

end if;

END IF;

v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '

|| v_startRecord;

DBMS_OUTPUT.put_line(v_sql);

OPEN v_cur FOR v_sql;

END GetRecordByPage;

end PCK_Pager;

oracle高性能分页,Oracle中高性能分页包相关推荐

  1. oracle 分页_Mybatis:PageHelper分页插件源码及原理剖析

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:祖大俊 my.oschina.net/zudajun/blog/745232 Pag ...

  2. ASP.NET调用Oracle分页存储过程并结合ASPnetpager分页控件 实现分页功能

    之前用的是GridView自带的分页功能,那速度啊慢的真实不行  ,决定自定义分页  Oracle库里有5W多条数据 AspnetPager做的还是不错,拿过来用 Oracle 分页存储过程: cre ...

  3. rowbounds分页oracle,Oracle使用MyBatis中RowBounds实现分页查询功能

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...

  4. Oracle 数据库中对记录进行分页处理

    学习到 oracle 的视图的时候,了解到对 Oracle 中数据的记录进行分页处理和 Mysql 提供的 limit 来进行分页处理大有不同,limit 是 mysql 中特有的关键字. 那么在 o ...

  5. oracle分页的三种方式,oracle 使用rownum的三种分页方式

    rownum是Oracle数据库中的一个特有关键字,返回的是一个数字代表记录的行号. 基础知识:rownum只能做 获取51到100的数据 三种分页的写法: 1.使用minus,原理就是查询出前100 ...

  6. Oracle、MySql、SQLServer 数据库分页查询语句

    (一).** mysql的分页查询** mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句* firs ...

  7. jsp分页技术用oracle实现,Oracle Rownum的使用与JSP分页显示的实现

    Oracle Rownum的使用与JSP分页显示的实现 徐越人 [期刊名称]<计算机与现代化> [年(卷),期]2007(000)010 [摘要]首先对Oracle的Rownum使用的诸多 ...

  8. Oracle数据库表连接查询并分页SQL语句提示未明确定义列

    Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...

  9. .Net/C#分库分表高性能O(1)瀑布流分页

    框架介绍 依照惯例首先介绍本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 dotnet下唯一一款全自动分表 ...

  10. 留言送书丨《Oracle高性能系统实战大全》包邮到家

    墨墨导读:最近北京大学出版社出版了新书<Oracle高性能系统实战大全>,墨天轮联合北京大学出版社,赠送五本书给大家,点击本文"阅读原文"跳转墨天轮原文并留言,说出想读 ...

最新文章

  1. [bug]不包含“AsNoTracking”的定义
  2. 利用Python编辑一个发送邮件的脚本
  3. zookeeper学习之原理
  4. Android硬件抽象层(HAL)概要介绍和学习计划 1转
  5. 其他机器无法访问php,PHP 局域网其他机器无法访问的问题
  6. python数字排序 循环_【python-leetcode448-循环排序】找到所有数组中消失的数字
  7. mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份
  8. 服装零售行业洞察报告
  9. 38 WM配置-作业-定义库存转储和补充控制
  10. 查询php的扩展,php命令行查看扩展信息(示例代码)
  11. 前端开发的难点到底在什么地方?
  12. 程序员告诉你如何用技术手段玩转冲顶大会
  13. 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.5 小结
  14. SpringBoot请求参数传递与接收
  15. Hadoop权威指南-读书笔记
  16. 微信小程序踩坑——项目内文件夹删除不掉
  17. 网络硬件常识:光模块
  18. c++ 的vector、array和数组的比较
  19. 设计原则 - 单一职责原则
  20. Android4.4 状态栏WiFi图标显示流程

热门文章

  1. Ubuntu20.04配置mysql环境及远程连接
  2. Slava and tanks(CodeForces - 877C)
  3. C++小游戏——海战棋
  4. ssm框架返回html,ssm框架controller层返回json格式数据到页面
  5. python爬虫爬取一次数据多长时间_「Python爬虫系列讲解」1. 网络数据爬取概述
  6. php算法复杂度,php的几个经典排序算法及时间复杂度和耗时​
  7. 4 angular 重构 项目_TypeScript项目开发实战 | 撸起来
  8. zabbix 3.0 监控mysql_Zabbix-3.0.3 使用自带模板监控 MySQL
  9. 比赛排行榜如何在LED大屏上实现自动实时滚动播报?
  10. 《程序是怎样跑起来的》第十一章读后感