自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個(gè)Oracle遞歸查詢的實(shí)例代碼分析

數(shù)據(jù)庫(kù) Oracle
本文通過(guò)對(duì)一段遞歸查詢代碼的分析來(lái)介紹Oracle數(shù)據(jù)庫(kù)遞歸查詢的實(shí)現(xiàn),希望能對(duì)讀者有所幫助。

Oracle數(shù)據(jù)庫(kù)遞歸查詢用途非常的廣泛,我們做遞歸查詢首先要定義好遞歸函數(shù),以及它的參數(shù)和返回值,然后實(shí)現(xiàn)查詢。本文通過(guò)一個(gè)代碼的實(shí)例講解介紹了這一過(guò)程,接下來(lái)我們就開(kāi)始介紹。

一、樹(shù)型表結(jié)構(gòu):

節(jié)點(diǎn)ID 上級(jí)ID 節(jié)點(diǎn)名稱

二、公式:

 

  1. select 節(jié)點(diǎn)ID,節(jié)點(diǎn)名稱,level  
  2.  
  3. from 表  
  4.  
  5. connect by prior 節(jié)點(diǎn)ID=上級(jí)節(jié)點(diǎn)ID  
  6.  
  7. start with 上級(jí)節(jié)點(diǎn)ID=節(jié)點(diǎn)值 

 

說(shuō)明:

1、常見(jiàn)的樹(shù)形結(jié)構(gòu)為公司組織機(jī)構(gòu)、地區(qū)……

2、求節(jié)點(diǎn)ID以上的結(jié)構(gòu),或以上的結(jié)構(gòu),將“節(jié)點(diǎn)ID=上級(jí)節(jié)點(diǎn)ID”左右順序換一下即可。

3、Level為Oracle的特殊字段,表示“層”的意思。當(dāng)前節(jié)點(diǎn)ID的下一層節(jié)點(diǎn)為“1”。

測(cè)試SQL:

說(shuō)明1、求002以下(或以上)所有子節(jié)點(diǎn)和層次(動(dòng)態(tài):總是從1開(kāi)始算),但不包括自身。

說(shuō)明2、如果求002以上的節(jié)點(diǎn),則“connect by prior topno=departno”,“=”兩邊的條件換位即可。

 

  1. select departno,departname,level  
  2.  
  3. from dept  
  4.  
  5. connect by prior departno=topno 
  6.  
  7. start with topno='002'

 

測(cè)試數(shù)據(jù):

 

  1. create table Dept(  
  2.  
  3. DepartNO varchar2(10),  
  4.  
  5. DepartName varchar2(20),  
  6.  
  7. TopNo varchar2(10));  
  8.  
  9. insert into Dept values('001',' 董事會(huì)','0');  
  10.  
  11. insert into Dept values('002','總裁辦 ','001');  
  12.  
  13. insert into Dept values('003','財(cái)務(wù)部 ','001');  
  14.  
  15. insert into Dept values('004','市場(chǎng)部 ','002');  
  16.  
  17. insert into Dept values('005','公關(guān)部 ','002');  
  18.  
  19. insert into Dept values('006','銷售部 ','002');  
  20.  
  21. insert into Dept values('007','分銷處 ','006');  
  22.  
  23. insert into Dept values('008','業(yè)務(wù)拓展處','004');  
  24.  
  25. insert into Dept values('009','銷售科','007'); 

 

向前查,比如:

 

  1. select distinct departno,departname,level  
  2.  
  3. from dept  
  4.  
  5. connect by prior topno=departno 
  6.  
  7. start with  
  8.  
  9. departno='005'

 

那么其實(shí)是查005自身以及上級(jí), 所以結(jié)果是005,002,001。

總結(jié):寫(xiě)遞歸最關(guān)鍵的要定義出來(lái)遞歸函數(shù),遞歸函數(shù)最關(guān)鍵的要定義出來(lái)它的參數(shù)和它的返回值。參數(shù)最重要,分析一下參數(shù)怎么去定義?這時(shí)候要分析遞歸的過(guò)程,遞歸過(guò)程什么樣呢?根據(jù)它的id 找它的父id,根據(jù)它的父id 找到它的孩子,根據(jù)它的孩子再找到它的孩子。那么分析這個(gè)參數(shù)肯定是一個(gè)id,因?yàn)橹挥袀鬟M(jìn)來(lái)id,才知道怎么去找這個(gè)id。

關(guān)于Oracle數(shù)據(jù)庫(kù)的遞歸查詢就介紹這么多,謝謝各位一直以來(lái)的支持!

【編輯推薦】

  1. 共享database獨(dú)立Schema構(gòu)建SAAS平臺(tái)
  2. 利用Sql Server將Excel中的數(shù)據(jù)導(dǎo)入Oracle
  3. Oracle跟蹤文件分析工具TKPROF使用簡(jiǎn)介
  4. 環(huán)境變量導(dǎo)致ASP.Net無(wú)法連接Oracle的一個(gè)案例
  5. PLSQL Developer8連接Oracle 10g X64版報(bào)錯(cuò)的解決
責(zé)任編輯:趙鵬 來(lái)源: 博客園
相關(guān)推薦

2011-07-20 13:40:00

SQLite數(shù)據(jù)庫(kù)查詢數(shù)據(jù)

2011-07-20 14:32:59

SQLite數(shù)據(jù)庫(kù)LIKE查詢IN集合查詢

2009-11-02 15:15:43

Oracle授予用戶權(quán)

2010-04-06 10:32:12

Oracle遞歸查詢

2010-04-02 15:04:14

Oracle遞歸查詢

2010-04-26 14:43:17

Oracle遞歸條件查

2010-10-28 16:42:04

oracle多表查詢

2011-07-19 09:18:50

Oracle級(jí)聯(lián)刪除

2009-07-15 13:41:00

JDBC實(shí)例

2009-09-02 18:39:34

C#遞歸算法

2011-07-20 14:57:47

SQLite數(shù)據(jù)庫(kù)ORDER BYGROUP BY

2011-07-20 12:55:17

SQLite數(shù)據(jù)庫(kù)插入數(shù)據(jù)

2011-07-22 15:38:54

SQL Server數(shù)存儲(chǔ)過(guò)程切割字符串

2009-11-19 11:23:08

Oracle重作日志

2011-01-26 12:56:24

2011-07-20 17:02:51

Oracle數(shù)據(jù)庫(kù)

2024-01-08 13:47:00

代碼分析工具

2010-04-14 15:01:50

Oracle ASM

2009-11-18 15:05:56

PHP遞歸數(shù)組

2011-09-08 13:41:53

Widget
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)