日期:2014-05-16  浏览次数:20387 次

oracle start with....connect by oracle树

ORACLE 提供了一个有趣的功能 connect by 子句,它可以对具有家族树结构的分枝进行排序。它的用途有机构或公司的各层结构,财务的科目代码等。

要使用查询遍历,需要在将数据在基表中按照层次结构进行存储。比如一个组织机构就是这样的典型例子。

实现语句:
SELECT column
FROM?table_name
START WITH?column=value
CONNECT?BY?PRIOR?
父主键=子外键

网上有朋友已经给了一个简洁的例子,就直接引用他的例子如下:
——————————————————————————————————————

Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
创建示例表:
CREATE TABLE TBL_TEST
(
? ID??? NUMBER,
? NAME? VARCHAR2(100 BYTE),
? PID?? NUMBER????????????????????????????????? DEFAULT 0
);
?
插入测试数据:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
?
从Root往树末梢递归
select * from TBL_TEST
?start with id=1
?connect by prior id = pid
?
从末梢往树ROOT递归
select * from TBL_TEST
?start with id=5
?connect by prior pid = id
是从头部开始还是从尾部开始可以这么记忆:
如果是头部则 prior id = pid(用自己的id去关联别人的上级id)
如果是尾部则 prior pid = id(用自己的上级id去关联别人的id)

?