oracle的递归运算(树运算)start with org_id ='1'connect by prior parent_id=son_id
?
1.前言?
? oracle的递归运算,在我们web页面的目录结构中会经常用到,据说是面试经常出的题目,而网上的一些东西说得都不是很明了,所以自己整理了一下,以下主要通过一个例子来说明,可以直接copy代码运行一下。?
? www.2cto.com ?
2.start with org_id = '条件1' ?prior parent_id = ?son_id; 的作用?
? 这个就是为了把树形结构全部查出来,树的目录就放在同一张表中,如?
1?
|--2?
|--3?
|--4?
? ?|--5?
? ? ? |--6?
|--7?
? ?|--8?
? ? ? |--9?
? ? ? ? ?|--10?
? www.2cto.com ?
这样的结构怎么查出来呢,这种特殊的查询,connect by perior就派上用场了 。?
3.代码?
create table TESTTEMP ?
( ?
? parent_ID ? ?VARCHAR2(30), ?
? son_ID VARCHAR2(30) ?
); ?
??
insert into TESTTEMP values('1','0'); ?
insert into TESTTEMP values('1','2'); ?
insert into TESTTEMP values('1','3'); ?
insert into TESTTEMP values('1','4'); ?
insert into TESTTEMP values('1','7'); ?
insert into TESTTEMP values('4','5'); ?
insert into TESTTEMP values('5','6'); ?
insert into TESTTEMP values('7','8'); ?
insert into TESTTEMP values('8','9'); ?
insert into TESTTEMP values('9','10'); ?
commit; ?
select * from TESTTEMP ??
start with parent_ID='1' ?
connect ?by ?parent_ID= prior son_ID ??
? www.2cto.com ?
结果:?
1
0?
1
2?
1
3?
1
4?
4
5?
5
6?
1
7?
7
8?
8
9?
9
10?
4。总结?
? 上面的例子,作用是实现遍历所有节点。如果prior 放在 connect ?by后面的话,那就是从上查找。
?