- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Oracle递归树形结构查询功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的.
概要:树状结构通常由根节点、父节点、子节点和叶节点组成,简单来说,一张表中存在两个字段,dept_id,par_dept_id,那么通过找到每一条记录的父级id即可形成一个树状结构,也就是par_dept_id(子)=dept_id(父),通俗的说就是这条记录的par_dept_id是另外一条记录也就是父级的dept_id,其树状结构层级查询的基本语法是:
1
2
3
4
5
6
|
SELECT
[
LEVEL
],*
FEOM table_name
START
WITH
条件1
CONNECT
BY
PRIOR
条件2
WHERE
条件3
ORDER
BY
排序字段
|
说明:LEVEL---伪列,用于表示树的层次 。
条件1---根节点的限定条件,当然也可以放宽权限,以获得多个根节点,也就是获取多个树 。
条件2---连接条件,目的就是给出父子之间的关系是什么,根据这个关系进行递归查询 。
条件3---过滤条件,对所有返回的记录进行过滤.
排序字段---对所有返回记录进行排序 。
对prior说明:要的时候有两种写法:connect by prior dept_id=par_dept_id 或 connect by dept_id=prior par_dept_id,前一种写法表示采用自上而下的搜索方式(先找父节点然后找子节点),后一种写法表示采用自下而上的搜索方式(先找叶子节点然后找父节点).
树状结构层次化查询需要对树结构的每一个节点进行访问并且不能重复,其访问步骤为:
大致意思就是扫描整个树结构的过程即遍历树的过程,其用语言描述就是:
步骤一:从根节点开始; 。
步骤二:访问该节点; 。
步骤三:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步; 。
步骤四:若该节点为根节点,则访问完毕,否则执行第五步; 。
步骤五:返回到该节点的父节点,并执行第三步骤.
除此之外,sys_connect_by_path函数是和connect by 一起使用的,在实战中具体带目的具体介绍! 。
实战:最近做项目的组织结构,对于部门的各级层次显示,由于这部分掌握不牢固,用最笨的like模糊查询解决了,虽然功能实现了,但是问题很多,如扩展性不好,稍微改下需求就要进行大改,不满意最后对其进行了优化。在开发中能用数据库解决的就不要用java去解决,这也是我一直保持的想法并坚持着.
创建表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
create
table
SYS_DEPT
(
dept_id VARCHAR2(32)
not
null
,
dept_name VARCHAR2(128),
dept_code VARCHAR2(32),
par_dept_id VARCHAR2(32),
dept_leader VARCHAR2(32),
dept_desc VARCHAR2(256),
create_time
CHAR
(19),
org_id VARCHAR2(32),
dept_type VARCHAR2(1),
order_id NUMBER,
state
CHAR
(1)
default
'1'
,
bqq_dept_id VARCHAR2(128),
bqq_par_dept_id VARCHAR2(128)
)
-- Add comments to the table
comment
on
table
SYS_DEPT
is
'部门信息,和单位多对一'
;
-- Add comments to the columns
comment
on
column
SYS_DEPT.dept_id
is
'主键'
;
comment
on
column
SYS_DEPT.dept_name
is
'名称'
;
comment
on
column
SYS_DEPT.dept_code
is
'编码,用于递归'
;
comment
on
column
SYS_DEPT.par_dept_id
is
'父级部门ID'
;
comment
on
column
SYS_DEPT.dept_leader
is
'部门领导ID'
;
comment
on
column
SYS_DEPT.dept_desc
is
'部门描述'
;
comment
on
column
SYS_DEPT.create_time
is
'yyyy-mm-dd HHMMSS'
;
comment
on
column
SYS_DEPT.org_id
is
'单位ID'
;
comment
on
column
SYS_DEPT.dept_type
is
'1:正式部门;2:虚拟部门(用于通讯录展示)'
;
comment
on
column
SYS_DEPT.order_id
is
'排序字段'
;
comment
on
column
SYS_DEPT.state
is
'0:无效;1:有效'
;
comment
on
column
SYS_DEPT.bqq_dept_id
is
'企业qqdeptid'
;
comment
on
column
SYS_DEPT.bqq_par_dept_id
is
'企业qq父类deptid'
;
|
插入测试数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'40288ac45a3c1e8b015a3c28b4ae01d6'
,
'客运部'
,
'110'
,
'-1'
,
null
,
null
,
'2017-02-14 182625'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 29,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b60f98a1d59b3'
,
'综合室'
,
'110001'
,
'40288ac45a3c1e8b015a3c28b4ae01d6'
,
null
,
null
,
'2017-04-12 150338'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 63,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6134d9ff2946'
,
'生产调度'
,
'110001001'
,
'4028e4d35b5ca4ee015b60f98a1d59b3'
,
null
,
null
,
'2017-04-12 160825'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 135,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b60f9fae95a44'
,
'站务中心'
,
'110002'
,
'40288ac45a3c1e8b015a3c28b4ae01d6'
,
null
,
null
,
'2017-04-12 150407'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 64,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613562be2a08'
,
'东岗站'
,
'110002001'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 160900'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 136,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6135f9de2aca'
,
'焦家湾站'
,
'110002002'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 160939'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 137,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6136a3e22bb2'
,
'拱星墩站'
,
'110002003'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161022'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 138,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613723bb2c5f'
,
'省气象局站'
,
'110002004'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161055'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 139,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6137a5772d06'
,
'五里铺站'
,
'110002005'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161128'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 140,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6137e4e72d57'
,
'兰州大学站'
,
'110002006'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161144'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 141,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613840112dd0'
,
'东方红广场站'
,
'110002007'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161208'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 142,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6138765c2e12'
,
'省政府站'
,
'110002008'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161221'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 143,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6138b84b2e68'
,
'西关站'
,
'110002009'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161238'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 145,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6139390e2f06'
,
'文化宫站'
,
'110002010'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161311'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 146,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613980a82f61'
,
'小西湖站'
,
'110002011'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161330'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 147,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b6139c1dc2fb4'
,
'七里河站'
,
'110002012'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161346'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 148,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613a24853047'
,
'西站十字站'
,
'110002013'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161412'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 149,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613a81f030ce'
,
'兰州西站北广场站'
,
'110002014'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161436'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 150,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613ad627313d'
,
'土门墩站'
,
'110002015'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161457'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 151,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613b394c31c6'
,
'马滩站'
,
'110002016'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161522'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 152,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613b9051325e'
,
'兰州海关站'
,
'110002017'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161545'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 153,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613c286b332e'
,
'兰州城市学院(省科技馆)站'
,
'110002018'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161624'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 154,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613c806933a3'
,
'深安大桥南站'
,
'110002019'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161646'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 155,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613cdf98342c'
,
'陈官营站'
,
'110002020'
,
'4028e4d35b5ca4ee015b60f9fae95a44'
,
null
,
null
,
'2017-04-12 161711'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 157,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
'乘务中心'
,
'110003'
,
'40288ac45a3c1e8b015a3c28b4ae01d6'
,
null
,
null
,
'2017-04-12 150424'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 65,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613d738d34f4'
,
'陈官营车场组'
,
'110003001'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161748'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 158,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613defed359e'
,
'东岗车场组'
,
'110003002'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161820'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 159,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613e42ae3612'
,
'第一车队'
,
'110003003'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161841'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 161,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613e7a50366c'
,
'第二车队'
,
'110003004'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161856'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 162,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613ebc8e36c1'
,
'第三车队'
,
'110003005'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161913'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 163,
'1'
,
null
,
null
);
insert
into
SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
values
(
'4028e4d35b5ca4ee015b613eff483729'
,
'第四车队'
,
'110003006'
,
'4028e4d35b5ca4ee015b60fa3e2f5a94'
,
null
,
null
,
'2017-04-12 161930'
,
'402881e54c40d74d014c40d8407a0016'
,
'1'
, 164,
'1'
,
null
,
null
);
|
在这张表中有三个字段:dept_id 部门主键id;dept_name 部门名称;dept_code 部门编码;par_dept_id 父级部门id(首级部门为 -1); 当前节点遍历子节点(遍历当前部门下所有子部门包括本身) 。
1
2
3
4
5
|
select
t.dept_id, t.dept_name, t.dept_code, t.par_dept_id,
level
from
SYS_DEPT t
start
with
t.dept_id =
'40288ac45a3c1e8b015a3c28b4ae01d6'
connect
by
prior
t.dept_id = t.par_dept_id
order
by
level
, t.dept_code
|
结果:
dept_id=40288ac45a3c1e8b015a3c28b4ae01d6 是客运部主键,对其下的所有子部门进行遍历,同时用 order by level,dept_code 进行排序 以便达到实际生活中想要的数据;共31条数据,部分数据如图所示:
但是:
有问题啊,如果你想在上面的数据中获取层级在2也就是level=2的所有部门,发现刚开始的时候介绍的语言不起作用?并且会报ORA-00933:sql命令未正确结束,why?
这个我暂时也没有得到研究出理论知识,但是改变下where level='2'的位置发现才会可以的。错误的和正确的sql我们对比一下,以后会用就行,要是路过的大神知道为什么,还请告知下,万分感谢! 。
错误sql
1
2
3
4
5
6
|
select
t.dept_id, t.dept_name, t.dept_code, t.par_dept_id,
level
from
SYS_DEPT t
start
with
t.dept_id =
'40288ac45a3c1e8b015a3c28b4ae01d6'
connect
by
prior
t.dept_id = t.par_dept_id
where
level
=
'2'
order
by
level
, t.dept_code
|
正确sql
1
2
3
4
5
6
|
select
t.dept_id, t.dept_name, t.dept_code, t.par_dept_id,
level
from
SYS_DEPT t
where
level
=
'2'
start
with
t.dept_id =
'40288ac45a3c1e8b015a3c28b4ae01d6'
connect
by
prior
t.dept_id = t.par_dept_id
order
by
level
, t.dept_code
|
当然了,这个对其他形式的where过滤所有返回记录没有影响的,这个只是一个例外! 。
sys_connect_by_path函数求父节点到子节点路径 。
简单介绍下,在oracle中sys_connect_by_path与connect by 一起使用,也就是先要有或建立一棵树,否则无用还会报错。它的主要作用体现在path上即路径,是可以吧一个父节点下的所有节点通过某个字符区分,然后链接在一个列中显示.
sys_connect_by_path(column,clear),其中column是字符型或能自动转换成字符型的列名,它的主要目的就是将父节点到当前节点的“path”按照指定的模式出现,char可以是单字符也可以是多字符,但不能使用列值中包含的字符,而且这个参数必须是常量,且不允许使用绑定变量,clear不要用逗号。 文字容易让人疲劳,放图和代码吧 。
1
2
3
4
5
|
select
sys_connect_by_path(t.dept_name,
'-->'
),t.dept_id, t.dept_name, t.dept_code, t.par_dept_id,
level
from
SYS_DEPT t
start
with
t.dept_id =
'40288ac45a3c1e8b015a3c28b4ae01d6'
connect
by
prior
t.dept_id = t.par_dept_id
order
by
level
, t.dept_code
|
结果:
。
下面以最简单的情况进行示例说明:
1
2
3
4
5
|
SELECT
t.f_id, SYS_CONNECT_BY_PATH(t.f_id,
'\') AS con_code,
SYS_CONNECT_BY_PATH(t.f_name, '
\')
AS
con_name
FROM
表名 t
START
WITH
t.f_pid
IS
NULL
CONNECT
BY
PRIOR
t.f_id = t.f_pid;
|
。
说明:其中的f_id为标识码,f_pid为父节点标识码,f_name为名称 。
总结 。
以上所述是小编给大家介绍的Oracle递归树形结构查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢! 。
原文链接:https://www.cnblogs.com/Jingkunliu/archive/2019/09/20/11555591.html 。
最后此篇关于Oracle递归树形结构查询功能的文章就讲到这里了,如果你想了解更多关于Oracle递归树形结构查询功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Oracle 即时客户端和 Oracle 客户端有什么区别?你能给我解释一下吗?谢谢 最佳答案 Oracle 客户端带有安装程序和许多可执行文件,例如 sqlplus,tnsping,它是完整而庞大的
我正在寻找一个Delphi组件来直接连接到ORACLE数据库服务器,而无需安装oracle客户端。 我知道Oracle Data Access (ODAC)来自DevArt 。还有其他组件具有此功能吗
如何编写 Oracle 存储过程,以表 (X) 作为输入参数,并在过程内部使用表 X 来与另一个表 Y 联接? 表 X 将包含数千条记录。 不希望将表名作为 varchar 传递,然后使用动态 SQL
如何编写 Oracle 存储过程,以表 (X) 作为输入参数,并在过程内部使用表 X 来与另一个表 Y 联接? 表 X 将包含数千条记录。 不希望将表名作为 varchar 传递,然后使用动态 SQL
我要过滤COMMENTS属性为空的记录 我试过了 SELECT TABLE_NAME, COMMENTS FROM (SELECT TABLE_NAME, COMMENTS FROM (sel
我要下载 Oracle Instant Client for Linux x86-64 (64-bit)现在有一段时间了。 现在我注意到该网站在过去几个月中一直遇到技术问题。 要从 Oracle 下载
有什么方法可以将我的 Delphi 应用程序 (FireDac) 直接连接到 Oracle 数据库? 目前可以连接,但需要安装Oracle Client 在 embarcadero 站点 ( http
我有一张表,其中日期列的数据格式如下:“7/25/2014 12:14:27 AM”。我需要通过放入 where 子句来获取此日期。有人可以建议我该怎么做吗? 最佳答案 日期(存储在表中)是 repr
如果两个事务试图同时修改同一行会发生什么?通常,一旦行被修改,另一个事务等待直到第一个事务执行提交或回滚。但是,如果他们恰好在同一时刻发送更新请求怎么办? 最佳答案 答案是否定的。两个事务不能同时修改
我想知道为什么我不能在 Oracle 模式中有两个同名的索引?它抛出一个错误,指出该名称已被使用。我的印象是,由于索引在一个特定的表上,这应该不会导致任何错误,除非我们对同一个表上的两个不同列使用相同
我需要构建一个查询来按成员和到期日期检索信息组,但我需要为每个成员提供一个序列号.. 例如: 如果成员“A”有 3 条记录要过期,“B”只有 1 条,“C”有 2 条,我需要这样的结果: Number
独立程序 create procedure proc1 ( begin end; ) 存储过程 create package pkg1 ( procedure proc2 begin end; ) 最
在 Oracle 9i 中声明 FK 时遇到问题。我在这里查看了许多关于 SO 和一些在线文档(例如 http://www.techonthenet.com/oracle/foreign_keys/f
我和我的同事维护的应用程序在后端有一个 Oracle 数据库。我们正在考虑偶尔以“受限”模式运行应用程序,其中一个数据库表空间设置为只读。我们可以轻松地将必要的表和索引移动到单独的表空间,这些表空间将
我想实现一个自定义的回归聚合函数,类似于现有的 REGR_SLOPE . 我要定义的函数需要获取两列作为参数,例如 select T.EMPLOYEE_ID, CUSTOM_REGR_SL
我已经尝试解决这个问题一段时间了,我认为是时候寻求帮助了。我正在构建一个架构配置脚本,我想添加一些脚本输出和错误处理。这个想法是脚本输出窗口只会向我显示关键消息而没有所有噪音。 Create Temp
在旧的 Oracle 服务器(我被告知是 8i)上使用 JDBC 时,我遇到了一个非常令人困惑和奇怪的问题。我在那里准备了一个表,其中包含大约 10 列、数字、varchars、一个 raw(255)
我有一张 table Customer_Chronics在 Oracle 11g 中。 该表具有三个关键列,如下所示: 分支代码 客户 ID 期 我已按 branch_code 列表按表分区,现在我进
是否有存储用户自定义异常的oracle表? 最佳答案 没有。 与其他变量一样,用户定义的异常在 PL/SQL block 中定义,并且具有 PL/SQL 变量将具有的任何范围。所以,例如 DECLAR
在 oracle 中使用序列并使用 Before insert trigger 自动递增列或使用标识列是否更好,因为它在 Oracle 12 c 中可用? 最佳答案 无论哪种方式,您都将使用序列。 1
我是一名优秀的程序员,十分优秀!