gbk

          Oracle 10g 中的遞歸查詢(樹(shù)型查詢)

          Oracle 10g 中的遞歸查詢(樹(shù)型查詢)

           
          一、樹(shù)型表結(jié)構(gòu):
          節(jié)點(diǎn)ID  上級(jí)ID  節(jié)點(diǎn)名稱
          二、公式: 
          select 節(jié)點(diǎn)ID,節(jié)點(diǎn)名稱,level
          from 表
          connect 
          by prior 節(jié)點(diǎn)ID=上級(jí)節(jié)點(diǎn)ID
          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: 1,建立表結(jié)構(gòu)

          create table Dept(
          DepartNO  
          varchar2(10),
          DepartName  
          varchar2(20),
          TopNo    
          varchar2(10)
          );

           插入數(shù)據(jù): 

          insert into Dept values('001',' 董事會(huì)','0');
          commit;
          insert into Dept values('002','總裁辦 ','001');
          commit;
          insert into Dept values('003','財(cái)務(wù)部 ','001');
          commit;
          insert into Dept values('004','市場(chǎng)部 ','002');
          commit;
          insert into Dept values('005','公關(guān)部 ','002');
          commit;
          insert into Dept values('006','銷(xiāo)售部 ','002');
          commit;
          insert into Dept values('007','分銷(xiāo)處 ','006');
          commit;
          insert into Dept values('008','業(yè)務(wù)拓展處','004');
          commit;
          insert into Dept values('009','銷(xiāo)售科','007');
          commit;

           1,向前查 (從查詢本身一直到最上面的機(jī)構(gòu))

          比如:
          select distinct departno,departname,level
          from dept
          connect 
          by prior topno=departno
          start 
          with
          departno
          ='005';

            2,向后查:(從查詢本身一直到最下面的機(jī)構(gòu))

          select distinct departno,departname,level
          from dept
          connect 
          by prior departno=topno
          start 
          with
          topno
          ='001';

            COND2是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說(shuō)上一條記錄的ID(比如根記錄)是(下一條)本條記錄的PRAENTID,即本記錄的父親是上一條記錄。

          posted on 2009-04-21 15:30 百科 閱讀(184) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乌兰察布市| 梅河口市| 高雄县| 凯里市| 咸宁市| 舞阳县| 锦州市| 措美县| 马边| 漳浦县| 凭祥市| 临猗县| 金堂县| 同江市| 望奎县| 沂源县| 桓台县| 广丰县| 新宁县| 城口县| 名山县| 贵溪市| 东丰县| 扎兰屯市| 翼城县| 伊吾县| 锦屏县| 青阳县| 青河县| 威远县| 万荣县| 青州市| 军事| 兰溪市| 台南县| 凤台县| 唐河县| 隆安县| 昌都县| 白银市| 广宗县|