网站开发工具简介,企业网站用个人备案,淘宝客做自己网站,深圳华强北手机报价文章目录 一、准备数据二、基本使用三、level函数四、获取完整的全树路径 一、准备数据
创建表
CREATE TABLE TEST_ORG
(ID VARCHAR2(64) NOT NULL PRIMARY KEY,NAME VARCHAR2(200),PARTEN_ID VARCHAR2(64)
);
comment on column TEST_ORG.ID is 主键;
comment on column TES… 文章目录 一、准备数据二、基本使用三、level函数四、获取完整的全树路径 一、准备数据
创建表
CREATE TABLE TEST_ORG
(ID VARCHAR2(64) NOT NULL PRIMARY KEY,NAME VARCHAR2(200),PARTEN_ID VARCHAR2(64)
);
comment on column TEST_ORG.ID is 主键;
comment on column TEST_ORG.NAME is 名称;
comment on column TEST_ORG.PARTEN_ID is 父级id;插入数据
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(1, 北京市, 0);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(4, 东城区, 1);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(6, 天安门, 4);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(5, 延庆区, 1);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(7, 八达岭, 5);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(2, 天津市, 0);
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES(3, 上海市, 0);二、基本使用
1、获取完整的树结构 select * from TEST_ORG start with PARTEN_ID 0 connect by prior id PARTEN_ID;执行结果
id name parten_id1 北京市 04 东城区 16 天安门 45 延庆区 17 八达岭 52 天津市 03 上海市 02、获取指定节点的全部子节点包含指定节点
例获取北京市的全部子级传入id1 select * from TEST_ORG start with id 1 connect by prior id PARTEN_ID;执行结果
id name parten_id
1 北京市 0
4 东城区 1
6 天安门 4
5 延庆区 1
7 八达岭 5提示会返回当前数据及全部子级节点。
3、获取指定节点的全部子节点不包含指定节点
例获取北京市的全部子级传入PARTEN_ID1 select * from TEST_ORG start with PARTEN_ID 1 connect by prior id PARTEN_ID;执行结果
id name parten_id
4 东城区 1
6 天安门 4
5 延庆区 1
7 八达岭 5提示只会返回当前数据的全部子级节点。
4、获取指定节点的全部父节点包含指定节点
例获取天安门的全部父级 select * from TEST_ORG start with id 6 connect by prior PARTEN_ID id;执行结果
id name parten_id
6 天安门 4
4 东城区 1
1 北京市 0提示会返回当前数据以及全部父级节点。
三、level函数
level字段为oracle特有的层级字段可以通过level字段查询指定的层级。
例获取天安门的全部父级上层级2的一层 select t.*,level from TEST_ORG t WHERE level 2 start with id 6 connect by prior PARTEN_ID id;执行结果
id name parten_id
4 东城区 1 2提示只会返回当前数据以及全部父级节点的层级为2的数据。
四、获取完整的全树路径
例获取北京市以及全部子级指定id1表示北京市。 select t.*,sys_connect_by_path(name, -) text from TEST_ORG t start with id 1 connect by prior id PARTEN_ID;执行结果
id name parten_id text
1 北京市 0 -北京市
4 东城区 1 -北京市-东城区
6 天安门 4 -北京市-东城区-天安门
5 延庆区 1 -北京市-延庆区
7 八达岭 5 -北京市-延庆区-八达岭提示结合substr函数去除指定内容。
例如去除最开始的-符号
select t.*,substr(sys_connect_by_path(name, -), 3) text from TEST_ORG t start with id 1 connect by prior id PARTEN_ID;执行结果
id name parten_id text
1 北京市 0 北京市
4 东城区 1 北京市-东城区
6 天安门 4 北京市-东城区-天安门
5 延庆区 1 北京市-延庆区
7 八达岭 5 北京市-延庆区-八达岭