- 浏览: 22251 次
- 性别:
- 来自: 济南
最新评论
分页存储过程:
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 7611 将Map转换成List // key list List ... -
Effictive Java 读书笔记
2013-10-11 13:51 747Effictive Java 1 考虑用静 ... -
eclipseSSH整合
2013-02-25 16:16 6451 Exception loading sessions fr ... -
简单java ibatis
2012-12-24 13:50 0ibatis小巧,易上手,适合于小型项目开发。 其中对于引用的 ... -
自己做的Ajax小练习
2012-11-13 08:42 6451 关于Ajax三个方法的固定写法 <scri ... -
自己做的web练习
2012-11-12 19:54 590参见附件:service 与client -
struts2小知识点
2012-11-01 10:19 6621 默认的命名空间“ namespace="&qu ... -
2012-10-11 Hibernate杂碎
2012-10-11 18:35 5681 从Hibernate的参考手册中,我们基本可以总结出这样几 ... -
Hibernate BaseDao
2012-10-09 17:16 0package net.comtops.dao.impl; ... -
Hibernate 实现增删改
2012-10-09 16:53 685Configuration conf = null; S ... -
Hibernate 主键生成策略
2012-10-09 16:14 580此处我们只针对常用的数据库类型进行说明,其他的略过: 1 Or ... -
JSP一个正确的验证码
2012-09-27 15:13 671image.jsp页面 <%@ page conte ... -
SQL SERVER分页
2012-09-27 09:51 659分页方案一:(利用Not In和SELECT TOP分页) ... -
JDBC数据库连接
2012-09-10 16:11 507MySQL: String Driver="com ... -
oracle自增序列
2012-09-08 17:52 530创建自增序列 CREATE SEQUENCE SEQn ... -
ObjectOutputStream
2012-08-02 11:05 913要根据用户选择,向一个文件写一个类(Student)的实例,使 ... -
java
2012-07-30 14:45 359- 第一种情况: Comparator cmp = Col ... -
初始化块和构造器
2012-07-24 08:31 5891,构造器的语法格式 修饰符:public private,p ... -
黑马程序员:学习笔记第一天
2012-03-26 21:28 522android培训、java培训、期待与您交流! ------ ...
相关推荐
举例介绍在oracle中rownum和rowId的不同以及使用方法
oracle 分页查询 使用ROWNUM技巧及陷阱
oracle_SQL中rowid与rownum的使用
oracle_SQL中ROWID与ROWNUM的使用 很有用哦
Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid
oracle_SQL中 rowid 和rownum的使用
oracle 数据库 rowid与rownum的使用
Oracle中rownum的使用
有了以上从不同方面建立起来的对 rownum 的概念,那我们可以来认识使用 rownum 的几种现像 1. select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where ...
在MySQL中,我们通常都使用limit来完成数据集获取的分页操作,而在Oracle数据库中,并没有类似limit一样的方便方法来实现分页,因此我们通常都是直接在SQL语句中完成分页,这里就需要借助于rownum伪列或row_number()...
本文主要是以实例形式介绍了Oracle查询中rownum与rowid的不同之处,以及以假设的方式为例,查询条件为rownum = 2,在查询出第一条记录时的具体内容的介绍。 在查询中,我们可以注意到,类似于 select xx from ...
oracle 的rownum和咱们平时用的sqlserver的区别,其中好多的不一样!
Oracle Rownum的使用与JSP分页显示的实现.pdf
oracle rowid rownum 等组成原理
oracle rownum和distinct
ORACLE 中ROWNUM用法总结 整理版本,详细明了
关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum
写好oracle的连接字符串和查询语句,调用程序中的方法可以很方便的实现分页功能。该方法中,将参数连接字符串,查询的sql语句,指定每页显示多少行,调用成功后,会返回页数,行数,还有查询的结果数据集。 使用...