一個Oracle遞歸查詢的實例代碼分析
Oracle數據庫的遞歸查詢用途非常的廣泛,我們做遞歸查詢首先要定義好遞歸函數,以及它的參數和返回值,然后實現查詢。本文通過一個代碼的實例講解介紹了這一過程,接下來我們就開始介紹。
一、樹型表結構:
節點ID 上級ID 節點名稱
二、公式:
- select 節點ID,節點名稱,level
- from 表
- connect by prior 節點ID=上級節點ID
- start with 上級節點ID=節點值
說明:
1、常見的樹形結構為公司組織機構、地區……
2、求節點ID以上的結構,或以上的結構,將“節點ID=上級節點ID”左右順序換一下即可。
3、Level為Oracle的特殊字段,表示“層”的意思。當前節點ID的下一層節點為“1”。
測試SQL:
說明1、求002以下(或以上)所有子節點和層次(動態:總是從1開始算),但不包括自身。
說明2、如果求002以上的節點,則“connect by prior topno=departno”,“=”兩邊的條件換位即可。
- select departno,departname,level
- from dept
- connect by prior departno=topno
- start with topno='002';
測試數據:
- create table Dept(
- DepartNO varchar2(10),
- DepartName varchar2(20),
- TopNo varchar2(10));
- insert into Dept values('001',' 董事會','0');
- insert into Dept values('002','總裁辦 ','001');
- insert into Dept values('003','財務部 ','001');
- insert into Dept values('004','市場部 ','002');
- insert into Dept values('005','公關部 ','002');
- insert into Dept values('006','銷售部 ','002');
- insert into Dept values('007','分銷處 ','006');
- insert into Dept values('008','業務拓展處','004');
- insert into Dept values('009','銷售科','007');
向前查,比如:
- select distinct departno,departname,level
- from dept
- connect by prior topno=departno
- start with
- departno='005';
那么其實是查005自身以及上級, 所以結果是005,002,001。
總結:寫遞歸最關鍵的要定義出來遞歸函數,遞歸函數最關鍵的要定義出來它的參數和它的返回值。參數最重要,分析一下參數怎么去定義?這時候要分析遞歸的過程,遞歸過程什么樣呢?根據它的id 找它的父id,根據它的父id 找到它的孩子,根據它的孩子再找到它的孩子。那么分析這個參數肯定是一個id,因為只有傳進來id,才知道怎么去找這個id。
關于Oracle數據庫的遞歸查詢就介紹這么多,謝謝各位一直以來的支持!
【編輯推薦】