`

Oracle分页函数样例——用于提高当前框架分页性能

阅读更多
create or replace procedure P_QuerySplit(

  sqlscript varchar2, --表名/SQL语句

  pageSize integer, --每页记录数

  pageIndex integer, --当前页

  totalCount out number, --总记录数

  totalPage out number, --总页数

  v_cur out sys_refcursor --返回游标

  ) is

  /**

  * 
  *

  */

  v_PageSize number;

  v_PageIndex number;

  v_SQL_Count varchar2(4000);

  v_SQL varchar2(4000);

  v_StartIndex number;

  v_EndIndex number;

  begin

  v_PageSize:=pageSize;

  if v_PageSize=0 then

  v_PageSize:=1;

  end if;

  --统计记录数量

  v_SQL_Count := 'select count(*) from (' ? ? sqlscript ? ?') a ';

  execute immediate v_SQL_Count into totalCount;

  --计算总页数

  totalPage:=CEIL(totalCount/v_PageSize);

 --验证页号 如果页号大余了最大页数,返回最后一页

  v_PageIndex:=pageIndex;

  if v_PageIndex>totalPage then

  v_PageIndex:=totalPage;

  end if;

  --计算开始的Index和结束的Index

  v_StartIndex:=(v_PageIndex-1)*v_PageSize 1;

  v_EndIndex:=v_PageIndex*v_PageSize;

  v_SQL:='SELECT /* FIRST_ROWS */* FROM (';

  v_SQL:=v_SQL ? ?' SELECT A.*, ROWNUM RN ';

  v_SQL:=v_SQL ? ?' FROM (' ? ?sqlscript ? ?') A ';

  v_SQL:=v_SQL ? ?' WHERE ROWNUM <= ' ? ?v_EndIndex;

  v_SQL:=v_SQL ? ?')WHERE RN >= ' ? ?v_StartIndex;

  open v_cur for v_SQL;

  end P_QuerySplit;

  带排序的分页存储过程

  CREATE OR REPLACE PROCEDURE TABLEPAGE_SELECT(v_page_size  int, --the size of a page of list

  v_current_page int, --the current page of list

  v_table_name varchar2, --the talbe name

  v_order_field varchar2,--the order field

  v_order_sequence varchar2,--the order sequence should by "_desc"or "_asc",_is blank.

  --v_sql_select  varchar2, --the select sql for procedure

  --v_sql_count  varchar2, --the count sql for procedure

  --v_out_recordcount OUT int, --the num of return rows

  p_cursor OUT refcursor_pkg.return_cursor) as

  v_sql     varchar2(3000); --the sql for select all rows of list

  v_sql_count  varchar2(3000); --the count sql for procedure

  v_sql_order  varchar2(2000); --the order of list

  v_count    int; -- the amount rows fo original list

  v_endrownum  int; --the end row num of the current page

  v_startrownum int; --the start row num of the current page

  BEGIN

  ----set the order of list

  if v_order_field!='NO' then

  v_sql_order :=' ORDER BY '|| v_order_field ||' '||v_order_sequence;

  else

  v_sql_order :='';

  end if;

  ----catch the amount rows of list

  v_sql_count:='SELECT COUNT(ROWNUM) FROM '||v_table_name;

  execute immediate v_sql_count into v_count;

  -- v_out_recordcount := v_count;

  ----set the value of start and end row

  if v_order_sequence='desc' then

  v_endrownum:=v_count-(v_current_page-1)*v_page_size;

  v_startrownum:=v_endrownum - v_page_size + 1;

  else

  v_endrownum:= v_current_page * v_page_size;

  v_startrownum := v_endrownum - v_page_size + 1;

  end if;

  ----the sql for page slide

  v_sql := 'SELECT * FROM (SELECT '||v_table_name||'.*, rownum rn FROM '||v_table_name||' WHERE rownum <= ' ||

  to_char(v_endrownum) ||' '|| v_sql_order||') WHERE rn >= ' ||

  to_char(v_startrownum)||' '||v_sql_order;

  open p_cursor for v_sql;

  END TABLEPAGE_SELECT;


0
1
分享到:
评论

相关推荐

    解析函数高效实现分页

    oracle数据库利用解析函数高效实现分页,

    PHP实现的oracle分页函数实例

    主要介绍了PHP实现的oracle分页函数,结合实例形式分析了PHP针对oracle数据库使用rownum代替MySQL中limit实现的分页操作相关技巧,需要的朋友可以参考下

    java oracle数据库过程实现jsp分页

    java代码与oracle 函数包实现 jsp分页

    oracle常用函数.rar

    oracle 常用函数,connect by用法,分页方法

    oracle(数据类型函数).

    里面有详细的oracle函数 1、Oracle数据类型 2、Oracle函数分为单行函数和多行函数两大类(sql_function) 单行函数分类 字符函数 数值函数 日期函数 转换函数 通用函数 函数嵌套 分组函数:集合操作符(了解) 实现...

    Java Oracle分页处理

    分页技术信息显示页面 用户名 密 码 生 日 职 业 性 别 &lt;td&gt;&lt;bean:write name="temp" property="userName"/&gt; &lt;td&gt;&lt;bean:write name="temp" property=...

    Oracle数据库通用的分页存储过程

    Oracle数据库通用的分页存储过程,含存储过程源码,分页的小例子,供大家参考!

    使用Eclipse 3.3演示Oracle9i/10g的函数完成的分页动作

    该例子针对上次SQL实现分页公式使用的详细说明--说明具体在函数中怎样使用分页公式和SQL怎样在游标中返回的说明,然后JDBC怎样捞取数据,然后通过Servlet与JSP显示出来。当然该函数可以由读者进一步完成,我主要是...

    Oracle中使用Rownum分页详细例子

    本文将分别展示使用rownum伪列和row_number()分析函数来完成Oracle数据分页操作的具体使用方法,并分析和比较两者的性能优劣。 一、初始化测试数据 首先测试数据我选取了数据字典all_objects表中的70000条数据,创建...

    Oracle从入门到高级应用的全部课程文档

    这是我学习Oracle时,老师给的讲义,包含了Oracle从入门到高级应用的...Day08-Oracle分页查询和视图.pdf Day09-存储过程.pdf Day10-变量定义和循环控制.pdf Day11-plsql游标和函数.pdf Day12-触发器.pdf Day13-索引.pdf

    oracle分页存储过程 oracle存储过程实例

    代码如下:import java.sql.CallableStatement;import java.sql.Connection;...public class TestPage { public TestPage() { } public static void main(String[] args) { String driver = “oracle.jdbc.driver

    mysql oracle和sqlserver分页查询实例解析

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习….. (一)、mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: ...

    ORACLE学习资料大全(存过,索引,函数,优化,分页,联表,游标,基础sql)

    ORACLE学习资料大全(存过,索引,函数,优化,分页,联表,游标,基础sql)

    oracle使用管理笔记(一些经验的总结)

    10.oracle分页查询 21 (1)删除重复记录 22 11.oracle合并查询 24 12.oracle连接 25 13.oracle函数 26 (1)字符函数 26 (2)数学函数 26 (3)日期函数 27 (4)给表取别名的时候,不能加as;但是给列取别名,是可以加as 27...

    oracle实用教程-韩顺平

    韩顺平老师 oracle 教程笔记 1.Oracle 认证,与其它数据库比较,安装 2.Oracle 的基本使用--基本命令 3.oracle 用户管理 4.oracle 表的管理(数据类型,表创建删除,数据 CRUD 操作) 5.oracle 表查询(1) 6.oracle 表...

    Oracle 基础知识 -大全- 原创整理.pdf

    7.掌握oracle各种sql函数 8.了解oracle管理员的基本职责 9.掌握备份和恢复数据库/表的方法 10.理解表空间、数据字典、性能视图 11.掌握维护oracle数据完整性的技巧 12.理解索引概念,会建立索引 13.管理oracle的权限...

    浅析Oracle和Mysql分页的区别

    一、Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize ...二、Oracle使用rownum分页 select * from ( select rownum rn,a.* from table_name a whe

Global site tag (gtag.js) - Google Analytics