1、Oracle 树形结构实现我突然看见了一个函数 CONNECT BY,就想起以前想做一个树形的结构:就是大类型表 TB_INDUSTRYCATALOGUE 中有字段 INDUSTRYCATALOGUEID,name 小类型表TB_INDUSTRYNAME 中有字段 INDUSTRYNAMEID,INDUSTRYCATALOGUEID,name 要实现每个大类型名下有树形的小类型名。1.先创建一个表 aabb,字段为 id,name 导入 TB_INDUSTRYCATALOGUE 表中的数据:insert into aabb(id,name)select INDUSTRYCATALOGUEID,
2、namefrom TB_INDUSTRYCATALOGUE;2.在表 aabb 中加一个字段 pid 更改字段 pid 都为 0Update aabb set pid =0;3.类似创建表 aa 结构和 TB_INDUSTRYNAME 一样,导入 TB_INDUSTRYNAME 表的数据Insert into aaSelect * from TB_INDUSTRYNAME;4.有可能小类型表中的 INDUSTRYNAMEID 和大类型表中的 INDUSTRYCATALOGUEID 有重复的数据,这样就会造成 CONNECT BY 循环出错,第一次我就出现这个错误,所以避免重复可以把 aa 中的
3、 INDUSTRYNAMEID 都加一个很大的数和INDUSTRYCATALOGUEID 错开,我加了 1000。Update aa set INDUSTRYNAMEID=to_char(to_number(INDUSTRYNAMEID)+1000);5.这样就可把 aa 的数据导入 aabb 了。Insert into aabb(id,pid,name)Select INDUSTRYNAMEID,INDUSTRYCATALOGUEID,name from aa;6.这样就可以查询了:为了效果好点可以先设一下页的大小Set pagesize 1000其实 SYS_CONNECT_BY_PATH
4、 这个函数是 oracle9i 才新提出来的! 它一定要和 connect by 子句合用!第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符. 说白了这个函数的作用就是为你清楚的构建出树结构的查询结果。select SYS_CONNECT_BY_PATH(name, ) nameefrom aabbstart with pid=0connect by prior id=pid;环保环保废纸环保废金属环保纺织废料环保公共环卫设施环保环保监测仪器环保环保产品加工交通运输工具交通运输工具电梯、缆车及配件交通运输工具飞行器及配件交通运输工具集装箱交通运输工具二手交通产品及用具select LPAD( , 4*level-1)|name nameefrom aabbstart with pid=0connect by prior id=pid;环保废纸废金属纺织废料皮革废料化工废料电子浆料交通运输工具电梯、缆车及配件飞行器及配件集装箱