Oracle遞歸算法的經典用途,比如 多級部門下,子部門不能作為父部門的父部門。
有點拗口,比方說吧,爸爸部門下有甲兒子部門和乙兒子部門,甲或乙兒子部門不能成為爸爸部門的上級部門。
這個是很多管理系統的多級分類下的經典需求。
好吧。給出部門表結構--Department。-
Name Type Nullable Default Comments
---------- ------------- -------- ------- --------
ID NUMBER(12) --ID
DEPT_NO VARCHAR2(32) Y --部門編號
COMPANY_NO VARCHAR2(4) Y --區域
NAME VARCHAR2(128) Y --名字
PARENT_NO VARCHAR2(32) Y --父部門編號
判斷子部門是否能成為爸爸部門的上級部門,采用到了遞歸。SQL:
SELECT COUNT(*) FROM (SELECT D.DEPT_NO,D.PARENT_NO FROM Department D
CONNECT BY PRIOR D.DEPT_NO = D.PARENT_NO
START WITH D.DEPT_NO = #deptNo# ) t where t.DEPT_NO = #parentNo#
其中 CONNECT BY PRIOR .... START WITH..... 就是遞歸。 #deptNo# 、#parentNo# 分別代表 子部門 和 爸爸部門。
如果返回值等于1,則子部門不能成為爸爸部門的上級部門;如果返回值不等于1,反之
本文出自:億恩科技【www.endtimedelusion.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|