`
xzuse
  • 浏览: 43277 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Oracle 游标分页

阅读更多

Oracle 游标分页

 

先建一个包声明一个游标类型

create or replace package pkg_dividepage as
  type cur_page is ref cursor;
end pkg_dividepage;

 然后创建存储过程 如下:

 

create or replace procedure proc_dividepage(p_tableName    varchar2, --表名
                                            p_pageIndex    number, --当前页码
                                            p_pageSize     number, --每页记录数
                                            p_pageCount    out number, --总页数
                                            p_totalCount   out number, --总记录数
                                            v_cursor       out pkg_dividepage.cur_page, --返回的结果集
                                            p_where        varchar2, --查询条件
                                            p_order_key    varchar2, --排序关键字(asc desc)
                                            p_order_column varchar2 --排序字段
                                            ) as

  v_pageIndex number;
  v_pageSize  number;
  v_startCurs number;
  v_endCurs   number;
  v_sql       varchar2(2000);
  --输出参数可以对其进行运算操作,所以声明为out的参数在此不用定义变量来操作

begin

  v_sql := 'select count(*) from ' || p_tableName; -- ||'where 1=1';

  if p_where is not null or p_where <> '' then
    v_sql := v_sql || ' where ' || p_where;
  end if;
  execute immediate v_sql
    into p_totalCount; --查询总记录数

  p_pageCount := ceil(p_totalCount / p_pageSize); --计算总页数

  v_pageSize := p_pageSize;

  if v_pageSize < 0 then
    v_pageSize := 0;
  end if;

  v_pageIndex := p_pageIndex;

  if v_pageIndex < 0 then
    v_pageIndex := 1;
  end if;

  if v_pageIndex > p_pageCount then
    v_pageIndex := p_pageCount;
  end if;

  v_startCurs := (v_pageIndex - 1) * v_pageSize + 1;
  v_endCurs   := v_pageIndex * v_pageSize;

  v_sql := 'select * from (select rownum num,t.* from (select * from ' ||
           p_tableName;

  if p_where is not null or p_where <> '' then
    v_sql := v_sql || ' where ' || p_where;
  end if;

  if p_order_column is not null or p_order_column <> '' then
    v_sql := v_sql || ' order by ' || p_order_column || ' ' || p_order_key;
  end if;

  v_sql := v_sql || ') t where rownum<=' || v_endCurs || ')where num>=' ||
           v_startCurs;
                    
  open v_cursor for v_sql;
dbms_output.put_line(v_sql);
end proc_dividepage;

 最后v_sql:

   

    select * from (select t.*,rownum rn from (select * from p_tablename where p_where order by p_order_column p_order_key) t where rownum<=v_endCurs) where rn>=v_startCurs;

 

 

 

分享到:
评论

相关推荐

    oracle分页

    本文将深入探讨Oracle中的分页实现、存储过程、循环与游标的应用以及排序机制。 1. **分页原理** Oracle分页通常通过`ROWNUM`或`ROWNUMBER()`函数实现。`ROWNUM`是在查询执行时分配的,而`ROW_NUMBER()`是窗口函数...

    java连接Oracle分页显示

    3. **游标分页**:Oracle游标可以提供更灵活的分页方式,特别是对于复杂的查询。通过在PL/SQL块中定义游标,可以控制每次提取的数据量,然后在Java中调用这个存储过程来实现分页。 4. **视图分页**:创建一个视图并...

    ssh+oracle分页

    4. **Oracle数据库分页**:Oracle提供了多种分页方式,如ROWNUM、ROW_NUMBER() OVER()结合子查询、游标等。在Hibernate中,由于ROWNUM不能与WHERE子句一起使用,我们通常会结合子查询或者使用Oracle的高级分页特性如...

    oracle分页查询并返回总记录数据存储过程

    ### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...

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

    Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标(CURSOR)以及Oracle的高级分页功能如ROW_NUMBER()、RANK()和DENSE_RANK()等。 1. ROWNUM伪列: ROWNUM是Oracle数据库特有的一个伪列,它...

    oracle数据库级分页(java)

    Oracle数据库级分页是数据库管理中的一个重要概念,特别是在处理大量数据时,为了提高查询效率和用户体验,分页技术显得尤为关键。在Java开发中,我们通常利用JDBC(Java Database Connectivity)来实现这一功能。本...

    oracle数据库分页源码下载(myeclipse10.0版本)

    2. **Oracle游标**:在Oracle中,游标(Cursor)是处理单个查询结果集的一种方法,它可以用于逐行处理数据。在Java中,可以通过JDBC的ResultSet对象实现对游标的操作,从而进行分页查询。 3. **Java编程实现**:在...

    oracle 高效分页

    在Oracle数据库中实现高效分页是一项关键技能,尤其是在处理大量数据时。传统的分页方法可能会导致性能瓶颈,尤其是在数据量巨大、查询复杂度高的场景下。因此,掌握Oracle中的高效分页技术对于优化数据库性能至关...

    Oracle 高效分页存储过程(修改)

    在Oracle数据库管理中,高效地实现分页查询是优化数据库性能的重要一环,尤其是在处理大量数据时。分页存储过程可以极大地提升用户体验,因为它允许用户逐步加载数据,而不是一次性加载所有记录,从而节省网络资源和...

    Oracle 分页存储过程

    在调用这个存储过程时,你需要传递查询条件(`p_condition`)、当前页数(`p_page_num`)和每页记录数(`p_records_per_page`),存储过程将返回一个游标(`result`),你可以用它来遍历分页后的数据。 需要注意的...

    Oracle 存储过程分页

    总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...

    oracle存储过程返回游标数据集

    存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程

    Oracle 分页存储过程 终极版

    在Oracle数据库系统中,分页查询是常见的数据检索方式,特别是在大数据量的场景下,它能够帮助用户有效地管理和浏览结果集。"Oracle分页存储过程 终极版"旨在提供一个高效、灵活的解决方案,以应对各种分页查询的...

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

    它先计算出总记录数,然后根据页码和页面大小确定起始和结束行号,最后执行分页查询并打开游标供外部调用者使用。 在实际应用中,分页查询需要考虑性能优化。例如,可以使用索引来加速查询,避免全表扫描。同时,...

    Oracle 分页的存储过程

    Oracle 分页存储过程是数据库管理中的一个重要概念,它允许用户以特定的页面大小获取数据,而不是一次性获取所有数据,这有助于提高性能并减轻服务器负担。在Oracle中,可以通过创建存储过程来实现这一功能,尤其在...

    Oracle分页存储过程

    9. **`p_cursor`**: 输出游标,返回分页后的查询结果。 #### 动态SQL构建 在存储过程中,通过动态构建SQL语句实现分页查询。首先构造统计查询语句`v_count_sql`,计算满足条件的记录总数,然后根据总数计算出总...

    Oracle通用分页存储过程

    Oracle数据库在处理大数据量时,分页查询是一个常见的需求,以提高数据检索的效率和用户体验。"Oracle通用分页存储过程"就是为了解决这个问题而设计的。分页存储过程通常包含一系列SQL语句和逻辑,用于从数据库中按...

    oracle包用存储过程图分页

    根据提供的信息,我们可以详细解析如何在Oracle数据库中创建一个包,并在该包内定义一个存储过程来实现分页功能。这种做法通常用于处理大量数据时,以提高查询效率和用户体验。 ### Oracle包与存储过程 #### 一、...

    Oracle All 添加 修改 更新 Oracle分页 emp表 存储过程实现

    在这个场景中,我们将深入探讨如何在Oracle中针对emp表实现分页查询的存储过程。 首先,让我们了解什么是分页查询。在大数据量的表格中,一次性加载所有数据可能会对系统性能造成压力,因此通常我们会采用分页的...

    通用数据库分页 扩展dbutil (附代码下载)

    这可能包括对SQL语句的动态构造,处理不同数据库系统的分页语法差异,如MySQL的`LIMIT`和`OFFSET`,Oracle的`ROWNUM`等。 4. **源码解析**: 源码中可能包含以下关键部分: - 分页查询方法:该方法接收分页参数,...

Global site tag (gtag.js) - Google Analytics