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