Oralce之递归算法

Oracle递归算法的经典用途,比如 多级部门下,子部门不能作为父部门的父部门。

有点拗口,比方说吧,爸爸部门下有甲儿子部门和乙儿子部门,甲或乙儿子部门不能成为爸爸部门的上级部门。

这个是很多管理系统的多级分类下的经典需求。

好吧。给出部门表结构--Department。

  1. Name       Type          Nullable Default Comments   
  2. ---------- ------------- -------- ------- --------    
  3. ID         NUMBER(12)              --ID                   
  4. DEPT_NO    VARCHAR2(32)  Y         --部门编号                  
  5. COMPANY_NO VARCHAR2(4)   Y         --区域                
  6. NAME       VARCHAR2(128) Y         --名字                   
  7. PARENT_NO  VARCHAR2(32)  Y         --父部门编号     

判断子部门是否能成为爸爸部门的上级部门,采用到了递归。SQL:

  1. SELECT COUNT(*) FROM (SELECT D.DEPT_NO,D.PARENT_NO FROM Department D  
  2.         CONNECT BY PRIOR D.DEPT_NO = D.PARENT_NO  
  3.         START WITH D.DEPT_NO = #deptNo# ) t  where t.DEPT_NO = #parentNo#  
其中 CONNECT BY PRIOR  ....  START WITH.....   就是递归。   #deptNo# 、#parentNo# 分别代表 子部门 和 爸爸部门。


如果返回值等于1,则子部门不能成为爸爸部门的上级部门;如果返回值不等于1,反之。

相关推荐