- 浏览: 23788 次
- 性别:
- 来自: 济南
最新评论
分页存储过程:
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 快速删除重复的记录。
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 快速删除重复的记录。
发表评论
-
关于Map常用的方法
2014-02-25 09:25 8231 将Map转换成List // key list List ... -
Effictive Java 读书笔记
2013-10-11 13:51 785Effictive Java 1 考虑用静 ... -
eclipseSSH整合
2013-02-25 16:16 7101 Exception loading sessions fr ... -
简单java ibatis
2012-12-24 13:50 0ibatis小巧,易上手,适合于小型项目开发。 其中对于引用的 ... -
自己做的Ajax小练习
2012-11-13 08:42 6941 关于Ajax三个方法的固定写法 <scri ... -
自己做的web练习
2012-11-12 19:54 677参见附件:service 与client -
struts2小知识点
2012-11-01 10:19 7051 默认的命名空间“ namespace="&qu ... -
2012-10-11 Hibernate杂碎
2012-10-11 18:35 6271 从Hibernate的参考手册中,我们基本可以总结出这样几 ... -
Hibernate BaseDao
2012-10-09 17:16 0package net.comtops.dao.impl; ... -
Hibernate 实现增删改
2012-10-09 16:53 729Configuration conf = null; S ... -
Hibernate 主键生成策略
2012-10-09 16:14 627此处我们只针对常用的数据库类型进行说明,其他的略过: 1 Or ... -
JSP一个正确的验证码
2012-09-27 15:13 708image.jsp页面 <%@ page conte ... -
SQL SERVER分页
2012-09-27 09:51 709分页方案一:(利用Not In和SELECT TOP分页) ... -
JDBC数据库连接
2012-09-10 16:11 547MySQL: String Driver="com ... -
oracle自增序列
2012-09-08 17:52 594创建自增序列 CREATE SEQUENCE SEQn ... -
ObjectOutputStream
2012-08-02 11:05 942要根据用户选择,向一个文件写一个类(Student)的实例,使 ... -
java
2012-07-30 14:45 411- 第一种情况: Comparator cmp = Col ... -
初始化块和构造器
2012-07-24 08:31 6331,构造器的语法格式 修饰符:public private,p ... -
黑马程序员:学习笔记第一天
2012-03-26 21:28 571android培训、java培训、期待与您交流! ------ ...
相关推荐
注意:在Oracle 12c及更高版本中,可以使用`FETCH FIRST N ROWS ONLY`来代替`ROWNUM`进行分页。 总结,`ROWID`和`ROWNUM`在Oracle SQL中各自扮演着不可或缺的角色。`ROWID`提供了直接访问数据的快速途径,而`ROWNUM...
### 在Oracle中灵活使用Rownum和RowId 在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过...
同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...
本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,...
有了以上从不同方面建立起来的对 rownum 的概念,那我们可以来认识使用 rownum 的几种现像 1. select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where ...
在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...
Oracle ROWNUM学习 Oracle ROWNUM是Oracle...ROWNUM是一个非常有用的伪字段,可以用于限制查询返回的总行数、实现分页、限制查询返回的第一行记录等。但是,需要注意ROWNUM的限制和使用子查询来解决一些查询问题。
【标题】"myeclipse+oracle分页"涉及的关键知识点主要集中在两个方面:MyEclipse集成开发环境和Oracle数据库的分页查询技术。下面将详细阐述这两个方面的内容。 首先,MyEclipse是一款强大的Java集成开发环境(IDE...
首先,我们要理解Oracle分页查询的基本概念。分页查询允许我们按照指定的页码和每页大小来获取数据,这样用户可以逐步浏览数据,而不是一次性看到所有内容。在Oracle中,这通常涉及到对数据进行排序和分配行号。 ...
rowid 与 rownumber 的介绍和应用 rowid 和 rownum 是 Oracle 数据库中的两个重要概念,对于...了解 rowid 和 rownum 的概念、结构和应用场景,可以帮助开发人员更好地使用 Oracle 数据库,提高数据库的性能和效率。
Oracle提供了一些内置的伪列供用户使用,如`ROWID`和`ROWNUM`等,这些伪列可以帮助开发人员更方便地进行查询、排序等操作。 #### 二、ROWID与ROWNUM详解 **ROWID:** - **定义**:ROWID是Oracle中用于唯一标识表中...
2. **嵌套查询**:Oracle分页通常涉及嵌套查询,最内层的查询获取所有数据,中间层添加ROWNUM限制,最外层则根据实际的分页需求进行筛选。 3. **查询优化**:在Cost-Based Optimizer (CBO)模式下,Oracle会尝试将...
总的来说,基于Oracle RowID的分页下载策略结合了`ROWNUM`、`StopKey`、逆向索引和多线程技术,旨在提供一种高效、稳定的方法来处理大规模数据的分批下载需求。这种策略不仅可以减轻数据库服务器的压力,还能确保...
Oracle数据库中的ROWNUM是一个非常重要的概念,特别是在处理大型数据集时进行分页查询。ROWNUM是一个伪列,意味着它并不是数据库表中实际存在的列,而是Oracle数据库在执行查询时动态生成的一个序列号,用于标记查询...
本文主要探讨了Oracle数据库中的三种分页方法:基于ROWNUM的分页、基于ROW_NUMBER()解析函数的分页和基于ROWID的分页。首先,我们创建了一个名为stu的测试表,包含学生的基本信息,如学号、考试号、姓名、专业、考试...
Oracle数据库中,rownum和rowid是两个非常重要的概念,它们在查询语句中有着不同的作用和特性。本文将深入探讨两者的区别,并通过实例解析它们在查询中的行为。 首先,rownum是一个“伪数列”,它并不是数据库中...
在Oracle中,我们可以使用RowNum函数来实现分页查询。RowNum函数可以返回当前记录的行号,从1开始。我们可以使用RowNum函数来限制查询的记录数。 例如,以下SQL语句可以查询表t_table_name的前10条记录: ```sql ...
本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...
在"rownum和rowid详解_平凡的三叶草_新浪博客.mht"中,可能会详细解释ROWNUM的使用方式,如限制返回结果的数量(如只取前N条记录)以及在分页查询中的作用。 3. **视图(View)**: Oracle视图是从一个或多个表或...
### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...