`
newObject
  • 浏览: 23788 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

oracle分页以及rownum、rowid的使用

 
阅读更多
分页存储过程:
1.根据ROWID来分,执行时间0.03秒
create or replace procedure del_page(
       cur_page in number,
       num_page in number
)
is
cursor cursor_test is
select * from userinfo where rowid in(select rid from (select rownum rn,rid from(select rowid rid,userinfo.* from
userinfo) where rownum<=cur_page*num_page) where rn>(cur_page-1)*num_page);
begin
       for row_test in cursor_test loop
       dbms_output.put_line(row_test.customerid||'||'||row_test.customername
       ||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);
       end loop;

  end;
2.按分析函数来分,执行时间1.01秒
create or replace procedure del_page1(
       cur_page in number,
       num_page in number
)
is
cursor cursor_test is
select * from (select t.*,row_number() over(order by customerid desc) rk from userinfo t)
where rk<=cur_page*num_page and rk>(cur_page-1)*num_page;
begin
       for row_test in cursor_test loop
       dbms_output.put_line(row_test.customerid||'||'||row_test.customername
       ||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);
       end loop;

  end;
3.按ROWNUM来分,执行时间0.1秒
create or replace procedure del_page2(
       cur_page in number,
       num_page in number
)
is
cursor cursor_test is
select t.*,rownum from
        userinfo t
        where rownum<=cur_page*num_page and rownum>(cur_page-1)*num_page;
begin
       for row_test in cursor_test loop
       dbms_output.put_line(row_test.customerid||'||'||row_test.customername
       ||'||'||row_test.pid||'||'||row_test.telephone||'||'||row_test.address);
       end loop;

  end;
1. ROWNUM 的使用
ROWNUM 是一个序列,是 oracle 数据库从数据文件或缓冲区中读取数据的顺序。它取得第 一条记录则 rownum 值为 1,第二条为 2,依次类推。如果你用>,>=,=,between...and 这些条 件,因为从缓冲区或数据文件中得到的第一条记录的 rownum 为 1,则被删除,接着取下条, 可是它的 rownum 还是 1,又被删除,依次类推,便没有了数据。
使用 SELECT 语句返回的结果集,若希望按特定条件查询前 N 条记录,可以使用伪列 ROWNUM。 ROWNUM 是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调: 先要有结果集)。简单的说 ROWNUM 是符合条件结果的序列号。它总是从 1 开始排起的。 使用 ROWNUM 时,只能使用<、<=、!=符号。
1 rownum 是从 1 开始,1 以上的自然数在 rownum 做等于判断时认为都是 false 条件,所以无法查到 rownum = n(n>1 的自然数) 。
2 rownum 对于大于某值的查询条件 如果想找到从第二行记录以后的记录,当使用 rownum>2 是查不出记录的,原因是由于 rownum 是一个总是从 1 开始的伪列,Oracle 认为 rownum> n(n>1 的自然

数)这种条件依 旧不成立,所以查不到记录。 那如何才能找到第二行以后的记录呢?可以使用子查询方法来解决。注意子查询中的 rownum 必须要有别名,否则还是不会查出记录来,这是因为 rownum

不是某个表的列,如 果不起别名的话,无法知道 rownum 是子查询的列还是主查询的列。
3 rownum 对于小于某值的查询条件 如果想找到第三条记录以前的记录,当使用 rownum<3 是能得到两条记录的。显然 rownum 对于 rownum<n(n>1 的自然数)的条件认为是成立的,所以可以找到记录。
 
2. ROWID 的使用——快速删除重复的记录
ROWID 是数据的详细地址, 通过 rowid, oracle 可以快速的定位某行具体的数据的位置。 ROWID 可以分为物理 rowid 和逻辑 rowid 两种。普通的表中的 rowid 是物理 rowid,索 引组织表(IOT)的 rowid 是逻辑 rowid。 当表中有大量重复数据时,可以使用 ROWID 快速删除重复的记录。
分享到:
评论

相关推荐

    oracle_SQL中rowid与rownum的使用

    注意:在Oracle 12c及更高版本中,可以使用`FETCH FIRST N ROWS ONLY`来代替`ROWNUM`进行分页。 总结,`ROWID`和`ROWNUM`在Oracle SQL中各自扮演着不可或缺的角色。`ROWID`提供了直接访问数据的快速途径,而`ROWNUM...

    在oracle中灵活使用Rownum和rowId

    ### 在Oracle中灵活使用Rownum和RowId 在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过...

    oracle_SQL-rowid--rownum.zip_oracle

    同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...

    oracle的分页查询

    本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,...

    对于 Oracle 的 rownum 问题

    有了以上从不同方面建立起来的对 rownum 的概念,那我们可以来认识使用 rownum 的几种现像 1. select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where ...

    oracle分页程序的实现

    在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...

    oracle rownum 学习

    Oracle ROWNUM学习 Oracle ROWNUM是Oracle...ROWNUM是一个非常有用的伪字段,可以用于限制查询返回的总行数、实现分页、限制查询返回的第一行记录等。但是,需要注意ROWNUM的限制和使用子查询来解决一些查询问题。

    myeclise+oracle分页

    【标题】"myeclipse+oracle分页"涉及的关键知识点主要集中在两个方面:MyEclipse集成开发环境和Oracle数据库的分页查询技术。下面将详细阐述这两个方面的内容。 首先,MyEclipse是一款强大的Java集成开发环境(IDE...

    oracle分页查询

    首先,我们要理解Oracle分页查询的基本概念。分页查询允许我们按照指定的页码和每页大小来获取数据,这样用户可以逐步浏览数据,而不是一次性看到所有内容。在Oracle中,这通常涉及到对数据进行排序和分配行号。 ...

    rowid与rownumber

    rowid 与 rownumber 的介绍和应用 rowid 和 rownum 是 Oracle 数据库中的两个重要概念,对于...了解 rowid 和 rownum 的概念、结构和应用场景,可以帮助开发人员更好地使用 Oracle 数据库,提高数据库的性能和效率。

    oracle的伪列与分页

    Oracle提供了一些内置的伪列供用户使用,如`ROWID`和`ROWNUM`等,这些伪列可以帮助开发人员更方便地进行查询、排序等操作。 #### 二、ROWID与ROWNUM详解 **ROWID:** - **定义**:ROWID是Oracle中用于唯一标识表中...

    Oracle分页技术

    2. **嵌套查询**:Oracle分页通常涉及嵌套查询,最内层的查询获取所有数据,中间层添加ROWNUM限制,最外层则根据实际的分页需求进行筛选。 3. **查询优化**:在Cost-Based Optimizer (CBO)模式下,Oracle会尝试将...

    基于Oracle RowID实现批量数据的分页下载.pdf

    总的来说,基于Oracle RowID的分页下载策略结合了`ROWNUM`、`StopKey`、逆向索引和多线程技术,旨在提供一种高效、稳定的方法来处理大规模数据的分批下载需求。这种策略不仅可以减轻数据库服务器的压力,还能确保...

    ORACLE数据库中ROWNUM用法详解

    Oracle数据库中的ROWNUM是一个非常重要的概念,特别是在处理大型数据集时进行分页查询。ROWNUM是一个伪列,意味着它并不是数据库表中实际存在的列,而是Oracle数据库在执行查询时动态生成的一个序列号,用于标记查询...

    对Oracle数据库三种分页方法的测试与研究.pdf

    本文主要探讨了Oracle数据库中的三种分页方法:基于ROWNUM的分页、基于ROW_NUMBER()解析函数的分页和基于ROWID的分页。首先,我们创建了一个名为stu的测试表,包含学生的基本信息,如学号、考试号、姓名、专业、考试...

    Oracle查询语句中rownum与rowid的不同之处分析

    Oracle数据库中,rownum和rowid是两个非常重要的概念,它们在查询语句中有着不同的作用和特性。本文将深入探讨两者的区别,并通过实例解析它们在查询中的行为。 首先,rownum是一个“伪数列”,它并不是数据库中...

    java笔记\Oracle里sql不能用limit的处理

    在Oracle中,我们可以使用RowNum函数来实现分页查询。RowNum函数可以返回当前记录的行号,从1开始。我们可以使用RowNum函数来限制查询的记录数。 例如,以下SQL语句可以查询表t_table_name的前10条记录: ```sql ...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...

    oracle的一些相关网页介绍

    在"rownum和rowid详解_平凡的三叶草_新浪博客.mht"中,可能会详细解释ROWNUM的使用方式,如限制返回结果的数量(如只取前N条记录)以及在分页查询中的作用。 3. **视图(View)**: Oracle视图是从一个或多个表或...

    oracle数据库伪列简单介绍

    ### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...

Global site tag (gtag.js) - Google Analytics