Oracle Connect By 使用实例(转)
2017-03-23 10:58
253 查看
原文链接:Oracle Connect By 使用实例
在实际开发中 connect by可以替代plsql或java中的循环间化开发代码,提高开发效率。如下是我在工作中遇到一个实际解决的问题
Oracle CONNECT BY的用法 http://www.linuxidc.com/Linux/2011-10/44224p2.htm
Oracle递归START WITH...CONNECT BY PRIOR子句用法 http://www.linuxidc.com/Linux/2013-01/78585.htm
Oracle 有表连接的connect by 的优化 http://www.linuxidc.com/Linux/2013-12/93455.htm
Oracle 树查询 性能优化纪实(start with, connect by) http://www.linuxidc.com/Linux/2011-04/35283.htm
Oracle Database 10g 中新的 CONNECT BY 特性 http://www.linuxidc.com/Linux/2011-06/37600.htm
具体场景:
原系统是一个管理宿舍信息的系统,dorm_room用于存放宿舍的房间信息具体表结构是
create table dorm_room(bno varchar2(2),fno varchar2(2),rno varchar2(2),bednum varchar2(2));
这里存放了楼栋号,层号,房间号,及房间中床位总数
具体数据如下
insert into dorm_room values(1,1,1,4);
insert into dorm_room values(1,1,2,4);
insert into dorm_room values(1,1,3,7);
也就是说有三个房间,前两个房间床位数都是4,最后一个房间的床位数是7
目前的需求是根据床位数显示出每个房间中所有床位的数据。期望结果是
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 3 1
1 1 3 2
1 1 3 3
1 1 3 4
1 1 3 5
1 1 3 6
1 1 3 7
如果用pl/sql根据每行的床位数判断循环次数,显示出每个房间的所有床位数,编写起来必然要书写较多行代码,因此选用
sql中的connect by的方式生成出所有的房间的床位数,具体sql为
select distinct bno,fno,rno,t.l
from (
select row_number()over(partition by bno,fno,rno order by level) rn,
bno,fno,rno,level l
from dorm_room
connect by level<=bedno
) t
order by bno,fno,rno
显示结果
BN FN RN L
-- -- -- ----------
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 3 1
1 1 3 2
1 1 3 3
BN FN RN L
-- -- -- ----------
1 1 3 4
1 1 3 5
1 1 3 6
1 1 3 7
在实际开发中 connect by可以替代plsql或java中的循环间化开发代码,提高开发效率。如下是我在工作中遇到一个实际解决的问题
Oracle CONNECT BY的用法 http://www.linuxidc.com/Linux/2011-10/44224p2.htm
Oracle递归START WITH...CONNECT BY PRIOR子句用法 http://www.linuxidc.com/Linux/2013-01/78585.htm
Oracle 有表连接的connect by 的优化 http://www.linuxidc.com/Linux/2013-12/93455.htm
Oracle 树查询 性能优化纪实(start with, connect by) http://www.linuxidc.com/Linux/2011-04/35283.htm
Oracle Database 10g 中新的 CONNECT BY 特性 http://www.linuxidc.com/Linux/2011-06/37600.htm
具体场景:
原系统是一个管理宿舍信息的系统,dorm_room用于存放宿舍的房间信息具体表结构是
create table dorm_room(bno varchar2(2),fno varchar2(2),rno varchar2(2),bednum varchar2(2));
这里存放了楼栋号,层号,房间号,及房间中床位总数
具体数据如下
insert into dorm_room values(1,1,1,4);
insert into dorm_room values(1,1,2,4);
insert into dorm_room values(1,1,3,7);
也就是说有三个房间,前两个房间床位数都是4,最后一个房间的床位数是7
目前的需求是根据床位数显示出每个房间中所有床位的数据。期望结果是
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 3 1
1 1 3 2
1 1 3 3
1 1 3 4
1 1 3 5
1 1 3 6
1 1 3 7
如果用pl/sql根据每行的床位数判断循环次数,显示出每个房间的所有床位数,编写起来必然要书写较多行代码,因此选用
sql中的connect by的方式生成出所有的房间的床位数,具体sql为
select distinct bno,fno,rno,t.l
from (
select row_number()over(partition by bno,fno,rno order by level) rn,
bno,fno,rno,level l
from dorm_room
connect by level<=bedno
) t
order by bno,fno,rno
显示结果
BN FN RN L
-- -- -- ----------
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 3 1
1 1 3 2
1 1 3 3
BN FN RN L
-- -- -- ----------
1 1 3 4
1 1 3 5
1 1 3 6
1 1 3 7
相关文章推荐
- Oracle--connect by...start with...的使用(转)
- Oracle Connect by 使用方法
- 使用oracle connect by 查询路径
- Oracle Connect By Prior(递归查询)简洁实例
- Oracle中connect by...start with...的使用
- 使用oracle的start with... connect by prior根据子节点,找到从子节点到根目录所有路径
- Oracle start with..Connect By prior..用法实例讲解
- Oracle中使用Start With connect by prior实现树功能
- Oracle之Connect by,Level,Start with的使用
- oracle connect by level start with使用
- Oralce的SYS_CONNECT_BY_PATH函数使用实例
- oracle的sys_connect_by_path及有关分组分类聚合函数使用
- #ORACLE 每日一点#Oracle CONNECT BY 使用
- oracle中进行简单树查询(递归查询) ,PRIOR、CONNECT_BY_ROOT的使用
- 转:Oracle中CONNECT BY LOOP的使用.非常不错
- oracle 函数: start with ... connect by 使用方法
- oracle中进行简单树查询(递归查询) ,PRIOR、CONNECT_BY_ROOT的使用 .
- 使用分析函数实现Oracle 10G提供的CONNECT_BY_ISLEAF和CONNECT_BY_ROOT的功能(转载)
- Oracle Connect By Prior(递归查询)简洁实例
- Oracle “CONNECT BY” 使用,connect by prior 递归算法