`

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中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...

    SSH+ORACLE好用分页

    在Oracle数据库中,可以使用内置的SQL分页函数,如ROWNUM或ROW_NUMBER(),结合子查询和临时表,实现高效的分页查询。另外,Oracle还支持索引优化,通过创建索引可以显著提高分页查询的性能。 总的来说,"SSH+ORACLE...

    oracle 分页完整代码

    在Oracle数据库中,分页查询是一项非常常见的操作,特别是在处理大量数据时,为了提高用户体验,我们需要将结果集分块加载,这就是所谓的分页。在这个Java和Oracle结合的分页实现中,我们将探讨如何通过Java后端配合...

    Oracle&JSP分页和Oracle分页

    另一种更高效的方法是使用Oracle的`ROW_NUMBER()`函数,配合`OVER()`子句,这样可以实现更复杂的分页逻辑。比如,如果我们要查询第5页的数据,每页20条,可以这样写: ```sql SELECT * FROM ( SELECT ROW_NUMBER()...

    oracle分页查询

    Oracle 分页查询是指从大型数据表中提取指定范围的记录,以便提高查询效率和减少数据传输量。常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法:使用 ROWNUM Oracle...

    Oracle的SQL分页实践

    为了解决这个问题,Oracle 10g引入了新的功能:ROW_NUMBER()函数,配合子查询和WITH子句(即CTE,公共表表达式)可以实现更高效的分页: ```sql WITH ordered_data AS ( SELECT t.*, ROW_NUMBER() OVER (ORDER BY ...

    Oracle 分页存储过程 终极版

    "Oracle分页存储过程 终极版"旨在提供一个高效、灵活的解决方案,以应对各种分页查询的需求。这个存储过程优化了性能,并支持各种条件筛选和排序,使得在海量数据中进行分页操作变得更为便捷。 首先,理解分页的...

    oracle分页,比较简单很好懂

    本篇文章将深入探讨Oracle分页的机制,并提供易于理解的示例。 首先,我们来看SQL标准的`OFFSET-FETCH`和`LIMIT`子句。虽然`LIMIT`不是Oracle的原生语法,但Oracle 12c引入了`FETCH FIRST n ROWS ONLY`和`OFFSET m ...

    oracle分页程序的实现

    Oracle数据库在处理大量数据时,为了提高查询效率和用户体验,常常需要使用分页查询。分页不仅能够有效地减少网络传输的数据量,还能让用户逐步浏览数据,提高网页加载速度。以下将详细介绍Oracle数据库中实现分页...

    Oracle分页

    总结,Oracle分页结合Servlet、AJAX、JSON和jQuery可以构建出高性能、用户体验良好的分页应用。Servlet处理后端逻辑和数据交互,AJAX实现前后端无刷新通信,JSON作为数据交换格式,而jQuery则负责前端的数据解析和...

    PHP实现的oracle分页函数实例

    在数据库应用开发中,分页是一种常见的功能,它允许用户在多个页面上分批次查看数据,提高系统的响应速度和用户体验。在PHP中实现对Oracle数据库的分页与对MySQL的实现有所不同,因为Oracle数据库并没有提供类似于...

    oracle分页案例

    此外,Oracle 12c引入了一种新的分页方式——`FETCH FIRST ... ROWS ONLY`,它更直观,语法类似于其他数据库系统: ```sql SELECT * FROM your_table ORDER BY some_column OFFSET (start_row - 1) ROWS FETCH NEXT...

    jsp分页 oracle 插件demo

    在IT行业中,分页是网页应用中不可或缺的一部分,尤其是在处理大量数据时,它能提高页面加载速度并优化用户体验。Oracle数据库作为广泛使用的SQL数据库系统,提供了高效的数据处理能力。本篇将详细介绍如何在JSP...

    java实现oracle分页策略

    总之,Java实现Oracle分页策略涉及到数据库查询设计、Java DAO接口的实现以及前端页面的展示。通过合理的分页策略,我们可以有效管理和展示大量的数据库记录,同时提升应用的性能和用户体验。在实际编程中,应根据...

    Oracle分页查询(很不错的介绍)

    首先,理解Oracle分页查询的基本结构。通常,Oracle的分页查询采用嵌套查询的方式实现。以下是一个典型的分页查询模板: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A ...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    oracle分页存储过程千万级

    本文将基于给定的“oracle分页存储过程千万级”文件信息,深入解析其核心概念、设计思路及实现细节。 ### 核心概念解析 #### 1. 存储过程(Stored Procedure) 存储过程是一种预编译的SQL代码块,存储在数据库...

    SSH+ORACLE通用分页

    在Oracle数据库中,进行分页查询通常涉及SQL的`ROWNUM`或`ROW_NUMBER()`函数,以及子查询或嵌套查询。`ROWNUM`在早期版本的Oracle中被广泛使用,它会为每行数据分配一个唯一的数字,通过与特定范围的比较来获取指定...

    Oracle-C#分页控件

    在Windows应用程序(Winform)开发中,分页是必不可少的一个特性,尤其是在处理大量数据时,它能提高应用性能,提供更好的用户体验。本教程将深入讲解如何在C#环境下利用Oracle数据库实现分页功能。 首先,你需要...

    oracle sql分页语句

    在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、ROW_NUMBER()等窗口函数。这里我们将详细探讨这些方法及其应用场景。 首先,ROWNUM是一个特殊的伪列,它在查询执行时为每一行...

Global site tag (gtag.js) - Google Analytics