- 浏览: 121218 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
liguocai2009:
liguocai2009 写道经过我我的测试,600万的数据, ...
Oracle row_number() over()解析函数高效实现分页 -
liguocai2009:
经过我我的测试,600万的数据,row_number()耗时4 ...
Oracle row_number() over()解析函数高效实现分页 -
学会做人:
lbs1988 写道扯淡 谁说row_number() ove ...
Oracle row_number() over()解析函数高效实现分页 -
lbs1988:
扯淡 谁说row_number() over 效率高 他们效率 ...
Oracle row_number() over()解析函数高效实现分页 -
id0096:
没觉得效率高到哪里去...用180W条数据测试,很多情况下没有 ...
Oracle row_number() over()解析函数高效实现分页
使用三层嵌套正确实现Oracle分页:+++++++++++++++++++++++++++++++++++++++
原始记录:
select t.*, t.rowid from t_stu t
order by t.s_birthday desc
返回:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
S0034 张34 C02 1983-8-8
S0033 张33 C02 1983-8-7
Oracle分页查询:
第一种:两层嵌套查询(网上流行的一种错误)
select * from
(
select rownum r,t.* from t_stu t
)
where r between 1 and 3 order by s_birthday desc
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
2 S0002 李四 C01 1989-3-21
3 S0003 张三丰 C02 1983-7-9
1 S0001 张三 C01 1980-1-13
说明:上面的结果可能与你的不一样,因为Oracle在没有order by的情况,是随机选取记录的。前3名的记录应该是:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
第二种:换用三层嵌套查询:
select b.* from
(select rownum r,a.* from
(select t.* from t_stu t order by s_birthday desc )a
)b
where b.r between 1 and 3
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
1 S0002 李四 C01 1989-3-21
2 S0036 张36 C02 1983-8-10
3 S0035 张35 C02 1983-8-9
正确!
所以Oracle分布查询一定要用三层嵌套,步骤如下:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from 表 order by 字段
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
★★★关键点:先排序,后给行号,两个步骤要分开!
为了程序的通用性,对任意数据集都能分页,利用子查询改为如下结构:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (一个已经排序的数据集)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
如上面的查询改为:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (select t.* from t_stu t order by s_birthday desc)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
或者其它查询语句:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (select t.* from 新闻表 t order by 发贴日期 desc)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
★原始数据数据脚本(请在命令窗口中粘贴以下语句即可):
prompt PL/SQL Developer import file
prompt Created on 2008年8月18日 星期一 by Administrator
set feedback off
set define off
prompt Dropping T_STU...
drop table T_STU cascade constraints;
prompt Creating T_STU...
create table T_STU
(
STU_ID CHAR(5),
S_NAME CHAR(6),
C_ID CHAR(3),
S_BIRTHDAY DATE,
S_SEX CHAR(1)
)
;
prompt Disabling triggers for T_STU...
alter table T_STU disable all triggers;
prompt Loading T_STU...
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0001', '张三 ', 'C01', to_date('13-01-1980', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0002', '李四 ', 'C01', to_date('21-03-1989', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0003', '张三丰', 'C02', to_date('09-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0004', '张4 ', 'C02', to_date('09-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0005', '张5 ', 'C02', to_date('10-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0006', '张6 ', 'C02', to_date('11-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0007', '张7 ', 'C02', to_date('12-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0008', '张8 ', 'C02', to_date('13-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0009', '张9 ', 'C02', to_date('14-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0010', '张10 ', 'C02', to_date('15-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0011', '张11 ', 'C02', to_date('16-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0012', '张12 ', 'C02', to_date('17-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0013', '张13 ', 'C02', to_date('18-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0014', '张14 ', 'C02', to_date('19-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0015', '张15 ', 'C02', to_date('20-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0016', '张16 ', 'C02', to_date('21-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0017', '张17 ', 'C02', to_date('22-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0018', '张18 ', 'C02', to_date('23-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0019', '张19 ', 'C02', to_date('24-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0020', '张20 ', 'C02', to_date('25-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0021', '张21 ', 'C02', to_date('26-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0022', '张22 ', 'C02', to_date('27-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0023', '张23 ', 'C02', to_date('28-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0024', '张24 ', 'C02', to_date('29-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0025', '张25 ', 'C02', to_date('30-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0026', '张26 ', 'C02', to_date('31-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0027', '张27 ', 'C02', to_date('01-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0028', '张28 ', 'C02', to_date('02-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0029', '张29 ', 'C02', to_date('03-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0030', '张30 ', 'C02', to_date('04-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0031', '张31 ', 'C02', to_date('05-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0032', '张32 ', 'C02', to_date('06-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0033', '张33 ', 'C02', to_date('07-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0034', '张34 ', 'C02', to_date('08-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0035', '张35 ', 'C02', to_date('09-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0036', '张36 ', 'C02', to_date('10-08-1983', 'dd-mm-yyyy'), null);
commit;
prompt 36 records loaded
prompt Enabling triggers for T_STU...
alter table T_STU enable all triggers;
set feedback on
set define on
prompt Done.
原始记录:
select t.*, t.rowid from t_stu t
order by t.s_birthday desc
返回:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
S0034 张34 C02 1983-8-8
S0033 张33 C02 1983-8-7
Oracle分页查询:
第一种:两层嵌套查询(网上流行的一种错误)
select * from
(
select rownum r,t.* from t_stu t
)
where r between 1 and 3 order by s_birthday desc
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
2 S0002 李四 C01 1989-3-21
3 S0003 张三丰 C02 1983-7-9
1 S0001 张三 C01 1980-1-13
说明:上面的结果可能与你的不一样,因为Oracle在没有order by的情况,是随机选取记录的。前3名的记录应该是:
STU_ID S_NAME C_ID S_BIRTHDAY
S0002 李四 C01 1989-3-21
S0036 张36 C02 1983-8-10
S0035 张35 C02 1983-8-9
第二种:换用三层嵌套查询:
select b.* from
(select rownum r,a.* from
(select t.* from t_stu t order by s_birthday desc )a
)b
where b.r between 1 and 3
返回:
R STU_ID S_NAME C_ID S_BIRTHDAY
1 S0002 李四 C01 1989-3-21
2 S0036 张36 C02 1983-8-10
3 S0035 张35 C02 1983-8-9
正确!
所以Oracle分布查询一定要用三层嵌套,步骤如下:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from 表 order by 字段
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
★★★关键点:先排序,后给行号,两个步骤要分开!
为了程序的通用性,对任意数据集都能分页,利用子查询改为如下结构:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (一个已经排序的数据集)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
如上面的查询改为:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (select t.* from t_stu t order by s_birthday desc)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
或者其它查询语句:
--第三层:分页过滤
select b.*
from (
--第二层:给定行号
select rownum r,a.* from (
--第一层:排序
select * from (select t.* from 新闻表 t order by 发贴日期 desc)
) a
where rownum<=最大行
)b
where b.r between 最小行 and 最大行
★原始数据数据脚本(请在命令窗口中粘贴以下语句即可):
prompt PL/SQL Developer import file
prompt Created on 2008年8月18日 星期一 by Administrator
set feedback off
set define off
prompt Dropping T_STU...
drop table T_STU cascade constraints;
prompt Creating T_STU...
create table T_STU
(
STU_ID CHAR(5),
S_NAME CHAR(6),
C_ID CHAR(3),
S_BIRTHDAY DATE,
S_SEX CHAR(1)
)
;
prompt Disabling triggers for T_STU...
alter table T_STU disable all triggers;
prompt Loading T_STU...
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0001', '张三 ', 'C01', to_date('13-01-1980', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0002', '李四 ', 'C01', to_date('21-03-1989', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0003', '张三丰', 'C02', to_date('09-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0004', '张4 ', 'C02', to_date('09-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0005', '张5 ', 'C02', to_date('10-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0006', '张6 ', 'C02', to_date('11-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0007', '张7 ', 'C02', to_date('12-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0008', '张8 ', 'C02', to_date('13-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0009', '张9 ', 'C02', to_date('14-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0010', '张10 ', 'C02', to_date('15-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0011', '张11 ', 'C02', to_date('16-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0012', '张12 ', 'C02', to_date('17-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0013', '张13 ', 'C02', to_date('18-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0014', '张14 ', 'C02', to_date('19-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0015', '张15 ', 'C02', to_date('20-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0016', '张16 ', 'C02', to_date('21-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0017', '张17 ', 'C02', to_date('22-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0018', '张18 ', 'C02', to_date('23-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0019', '张19 ', 'C02', to_date('24-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0020', '张20 ', 'C02', to_date('25-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0021', '张21 ', 'C02', to_date('26-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0022', '张22 ', 'C02', to_date('27-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0023', '张23 ', 'C02', to_date('28-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0024', '张24 ', 'C02', to_date('29-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0025', '张25 ', 'C02', to_date('30-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0026', '张26 ', 'C02', to_date('31-07-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0027', '张27 ', 'C02', to_date('01-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0028', '张28 ', 'C02', to_date('02-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0029', '张29 ', 'C02', to_date('03-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0030', '张30 ', 'C02', to_date('04-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0031', '张31 ', 'C02', to_date('05-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0032', '张32 ', 'C02', to_date('06-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0033', '张33 ', 'C02', to_date('07-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0034', '张34 ', 'C02', to_date('08-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0035', '张35 ', 'C02', to_date('09-08-1983', 'dd-mm-yyyy'), null);
insert into T_STU (STU_ID, S_NAME, C_ID, S_BIRTHDAY, S_SEX)
values ('S0036', '张36 ', 'C02', to_date('10-08-1983', 'dd-mm-yyyy'), null);
commit;
prompt 36 records loaded
prompt Enabling triggers for T_STU...
alter table T_STU enable all triggers;
set feedback on
set define on
prompt Done.
发表评论
-
oracle异常处理
2009-06-28 20:35 1949:变量名类似Pst 中 sql 的 ... -
性能优化之--------索引
2009-06-03 20:28 1147一, oracle的索引陷阱一个表中有几百万条数据,对某个字 ... -
oracle性能优化------分区技术
2009-06-02 07:08 1401数据库性能优化 Oracle方面的特性:分区技术 分区索 ... -
Oracle分区表总结
2009-05-25 16:02 1208在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应 ... -
Oracel函数
2009-05-24 14:31 1772SQL中的单记录函数1.ASCII返回与指定的字符对应 ... -
使用JDBC插入大量数据的性能测试
2009-05-21 16:18 3082使用jdbc向数据库插入100000条记录,分别使用state ... -
Oracle的光标
2009-05-20 21:07 1212... -
OLTP和OLAP的区别
2009-05-16 12:01 1565OLTP是联机事务处理 OLAP是联机分析处理 1.用户和 ... -
如何实现网站流量设计
2009-05-14 08:08 980需求:某网站每天都有 ... -
sql性能分析
2009-05-14 07:25 1052规则:select 字句要避免使用*。 使 ... -
Oracle最快删除重复记录
2009-05-12 07:45 1462Oracle删除重复记录的最快方法:++++++++++ ... -
实际项目中是如何进行数据库建模的
2009-05-12 07:26 1079其实在实际项目中建模的精华不外乎就是以下几点,但是真正的把 ... -
悲观锁和乐观锁
2009-05-10 23:56 1367加锁对并发访问的影响体现在锁的粒度上: 1、悲观锁假定其他 ... -
怎样杀死死锁!
2009-05-10 21:49 11251、 查出是哪个过程被锁! 2、查出是哪一个sid,通过si ... -
Oracle 的树形递归查询
2009-05-10 18:01 4282一、树型表结构: 节点ID 上级ID 节点名称 二 ... -
外键的认识和理解
2009-05-05 19:18 930外键的认识和理解:++++++++++++++++++++++ ... -
导入导出1000万条数据
2009-05-05 19:07 2605如何导入导出大数据量( ... -
Oracle sql性能优化总结
2009-05-04 23:11 805选择最有效率的表名顺 ... -
rownum总结
2009-05-04 16:58 978对于 Oracle 的 rownum 问题,很多资料都说不支持 ... -
什么是数据仓库
2009-05-04 00:55 910我们都知道,利用多种 ...
相关推荐
Java Oracle实现分页功能.pdf 本文主要介绍了如何使用Java语言与Oracle数据库实现分页功能,包括如何编写存储过程、如何使用Java调用存储过程等内容。 首先,文章介绍了分页的必要性,提到在许多情况下需要进行...
在Oracle数据库中实现分页查询是一项常见的需求,特别是在开发Web应用程序时,为了提高用户体验,通常需要展示大量的数据,并且能够按页浏览。本篇将详细讲解如何使用Oracle SQL语句来实现分页功能。 首先,我们...
MyBatis中Oracle实现分页效果实例代码 MyBatis是一款流行的持久层框架,能够帮助开发者快速实现数据库交互操作。其中,分页查询是常见的数据库操作之一。下面,我们将详细介绍MyBatis中Oracle实现分页效果实例代码...
在Oracle分页中,Hibernate通过HQL(Hibernate Query Language)或SQL来执行查询,并支持Criteria、Query和Session的Criteria API等方式实现分页。通常,我们会通过设置`setFirstResult`和`setMaxResults`方法来指定...
本文将详细介绍Oracle实现分页查询的几种SQL语法。 1. **无ORDER BY排序的写法** 这种方法适用于无需特定排序顺序的情况,效率最高。在查询时,它创建一个子查询,将ROWNUM伪列与实际数据结合,然后在外层查询中...
本示例着重讲解如何利用JDBC和Oracle数据库实现分页功能,同时涵盖一个表的基本操作:增加、删除和修改。 首先,我们需要了解JDBC。JDBC是Java API,它提供了一套标准接口,使得Java程序可以与各种类型的数据库进行...
Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标(CURSOR)以及Oracle的高级分页功能如ROW_NUMBER()、RANK()和DENSE_RANK()等。 1. ROWNUM伪列: ROWNUM是Oracle数据库特有的一个伪列,它...
以下将详细介绍Oracle数据库中实现分页查询的方法以及相关知识点。 在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的...
Oracle数据库作为业界广泛使用的数据库系统之一,在实现分页查询方面提供了多种方法。其中一种常用的方法就是使用`LIMIT`子句(尽管Oracle数据库本身不直接支持标准SQL中的`LIMIT`关键字,但可以通过其他方式模拟其...
使用JDBC时,可以结合LIMIT和OFFSET子句(Oracle不支持LIMIT,但可以通过ROWNUM模拟)来实现分页,而在Hibernate中,可以使用Criteria API或HQL的`setFirstResult`和`setMaxResults`方法来实现相同的功能。...
使用Hibernate的Criteria或HQL查询语言,配合PageHelper或者自己实现的分页逻辑,可以轻松实现分页查询。 3. **定义Service层**:在业务服务层,调用DAO层的分页查询方法,传入当前页数和每页显示的记录数,获取到...
在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,我们可以使用以下语句来查询前三个行: ```sql Select * from table1 where rownum ; ``` 这将返回表 table1 中的前三个行。但是,如果...
实现分页功能通常涉及以下步骤: 1. 计算总页数:通过查询表中记录总数除以每页显示的记录数得到。 2. 获取当前页的数据:使用`LIMIT`和`OFFSET`(在Oracle中通常用`ROWNUM`和子查询实现)来限制返回的数据量。 3. ...
Kettle中的“生成分页.ktr”可能就是实现这个功能的工作流,通过设置页码和每页大小来逐次获取数据。 4. **数据迁移**:“根据当前页码输出到txt.ktr”工作流可能是将从Oracle数据库中获取的分页数据转化为TXT格式...
本文将深入探讨如何使用Struts、Oracle数据库和JDBC技术实现分页功能,以提高应用程序的性能和用户体验。 首先,我们要了解分页的基本概念。分页是一种将大量数据分割成多个小部分(页)进行展示的技术,使得用户...
例如,在Hibernate中,我们可以利用`CriteriaQuery`或`Query`对象的`setFirstResult()`和`setMaxResults()`方法来实现分页。 总之,Oracle的分页可以通过ROWNUM伪列配合Java的JDBC实现,也可以借助ORM框架进行更...
以上就是通过Java、Oracle存储过程和JSP实现分页的基本流程。在实际项目中,可能还需要考虑更多细节,如错误处理、性能优化(如使用索引、避免全表扫描)以及用户体验优化(如加载提示、动态加载等)。理解并掌握这...
总结来说,Oracle和JSP结合实现分页涉及以下几个步骤:在Oracle中构造分页查询,使用JDBC在Servlet中执行查询,然后在JSP页面中展示数据。理解并熟练掌握这些步骤对于开发高效、用户友好的数据驱动网站至关重要。在...
在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、ROW_NUMBER()等窗口函数。这里我们将详细探讨这些方法及其应用场景。 首先,ROWNUM是一个特殊的伪列,它在查询执行时为每一行...