connect by 使用实例

在实际开发中  connect by可以替代plsql或java中的循环间化开发代码,提高开发效率。如下是我在工作中遇到一个实际解决的问题

具体场景:

原系统是一个管理宿舍信息的系统,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



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/750077/viewspace-1136628/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/750077/viewspace-1136628/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值