ITPub博客

首页 > 数据库 > Oracle > Oracle Connect By 使用实例

Oracle Connect By 使用实例

Oracle 作者:哇哈哈825 时间:2014-05-07 09:56:57 0 删除 编辑
在实际开发中  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博客 ” ,链接:https://blog.itpub.net/29635878/viewspace-1155595/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-30

  • 博文量
    43
  • 访问量
    46137