没有合适的资源?快使用搜索试试~ 我知道了~
首页Oracle递归树形结构查询功能
资源详情
资源评论
资源推荐

Oracle递归树形结构查询功能递归树形结构查询功能
oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形
结构查询功能,需要的朋友参考下
oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。
概要:树状结构通常由根节点、父节点、子节点和叶节点组成,简单来说,一张表中存在两个字段,dept_id,par_dept_id,那么通过找到每一条记录的父级id即可形成一个树状结构,也就
是par_dept_id(子)=dept_id(父),通俗的说就是这条记录的par_dept_id是另外一条记录也就是父级的dept_id,其树状结构层级查询的基本语法是:
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去解决,这也是我一直保持的想法并坚持着。
创建表:
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


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0