oracle实现部门的增删改查

一直想做一个部门的增删改查功能,终于发现了oracle实现部门的增删改查很简单。

1、创建数据表

一个简单的数据层级表字段

id    部门ID

name  部门名称

levels  层级(当前部门是属于第几层部门:例如一级部门、二级部门、三级部门等等)

parent_id 直属父级部门的id(例如:二级部门:信息部属于一级部门:公司)

创建完成之后的部门表如图所示:

 

2、创建完表之后,就介绍一个oracle专属的查询:层级查询。层级查询就是用来处理部门增删改查的问题。

具体操作:直接贴sql

select id, 
       levels,
       name ,
       parent_id
  from test       
 start with id = 1   
connect by prior id = parent_id

上面的查询语句就是查询id为1(即公司)下面的全部子节点,查询结果如下所示。

 然后在前端显示出来即可。如下图为前端显示出来的结果。

 

那么如何按照层级缩进呢?这个时候字段levels就起作用了,根据层级的大小对相应的结果进行缩进即可。具体代码这里就不贴出来了。

参考:https://zhuanlan.zhihu.com/p/58563707 

 

2、说完查询,接下来就说新增了,新增很简单。

直接使用下面的语句即可。

ID号:就不说了,在oracle中是没有自增字段的,所以要使用序列功能,具体如何使用,这里就不说了。

层级:例如说如果要在公司(层级为1)新增一个部门,那么这个新增的部门层级的值就是2了。levels=levels+1

名称:不说

父级ID:例如要在公司(id为1)新增一个部门,那么这个新增的部门的父级ID就为1

insert into test(ID,LEVELS,NAME,PARENT_ID) values('ID号','层级','名称','父级ID')

 

3、说完插入,然后就是修改了,这个基本就不需要讲了,直接用下面的sql就行了

 update test set name='需要修改部门的名称' where id='部门的id号'

 

4、说完修改,最后就是删除了,如果说:“删除也简单啊,直接根据部门的id号直接删除这条信息就行了。“。这个想法是错误的,因为你只是删除当前部门的信息而已,并没有删除子部门的信息,最终的结果是会导致这个表出现很多没用的数据。

正确的做法就是如下代码所示:

delete test where id in(  
    select id from test  
      start with id=5  
      connect by prior id=parent_id )

回想一下,刚才查询的时候,是不是也出现里面的子查询语句。上面代码中的子查询语句,就是查询的时候用到的语句。这个查询语句的意思就是查询当前节点的子节点的信息。所以如上面的语句所示,在语句外面直接使用in就能删除当前节点和它的子节点的信息。就能正确的实现删除功能了。

参考:https://abcdedf.iteye.com/blog/1100873 

posted @ 2019-07-24 18:40  masha2017  阅读(494)  评论(0编辑  收藏  举报