数据库的表中存放树形数据最常用的方式是tb_dept(dept_id,dept_name,parent_id),查询某个部门的所有子部门,并把结
果组织成树形结构是我们经常需要解决的一个问题,oracle提供了查询树形数据的语法。他可以查询数中某个节点的所有子节点,结果级按展开一个树的顺序
出现,并且可以列出某节点所处的层,便于我们处理数据,示例如下:
drop table test_dept;
create table test_dept
(dept_id varchar2(20),dept_name varchar2(40),parent_id varchar2(20));
insert into test_dept values ('0','dept1',null);
insert into test_dept values ('1','dept11','0');
insert into test_dept values ('11','dept11','1');
insert into test_dept values ('12','dept12','1');
insert into test_dept values ('2','dept2','0');
insert into test_dept values ('21','dept21','2');
insert into test_dept values ('211','dept211','21');
insert into test_dept values ('212','dept212','21');
insert into test_dept values ('22','dept22','2');
select dept_id,dept_name,level
from test_dept
start with dept_id='0'
connect by prior dept_id=parent_id;
结果如下:
DEPT_ID
DEPT_NAME
LEVEL
-------------------- ---------------------------------------- ----------
0
dept1
1
1
dept11
2
11
dept11
3
12
dept12
3
2
dept2
2
21
dept21
3
211
dept211
4
212
dept212
4
22
dept22
3
9 rows selected