Oracle樹形結構查詢(遞歸)

引用:https://blog.csdn.net/u012615705/article/details/78321022  文章轉自上述地址,內部有稍許改動,若有須要請查看原文。 java

oracle樹狀結構查詢即層次遞歸查詢,是sql語句常常用到的,在實際開發中組織結構實現及其層次化實現功能也是常常遇到的。 sql

概要:樹狀結構一般由根節點、父節點、子節點和葉節點組成,簡單來講,一張表中存在兩個字段,dept_id,par_dept_id,那麼經過找到每一條記錄的父級id便可造成一個樹狀結構,也就是par_dept_id(子)=dept_id(父),通俗的說就是這條記錄的par_dept_id是另一條記錄也就是父級的dept_id,其樹狀結構層級查詢的基本語法是: 數據庫

  SELECT [LEVEL],* oracle

  FEOM table_name  app

  START WITH 條件1 函數

  CONNECT BY PRIOR 條件2 測試

  WHERE 條件3 優化

  ORDER BY 排序字段 編碼

  說明:LEVEL---僞列,用於表示樹的層次 spa

     條件1---根節點的限定條件,固然也能夠放寬權限,以得到多個根節點,也就是獲取多個樹

     條件2---鏈接條件,目的就是給出父子之間的關係是什麼,根據這個關係進行遞歸查詢

     條件3---過濾條件,對全部返回的記錄進行過濾。

     排序字段---對全部返回記錄進行排序

  對prior說明:要的時候有兩種寫法:connect by prior dept_id=par_dept_id 或 connect by dept_id=prior par_dept_id,前一種寫法表示採用自上而下的搜索方式(先找父節點而後找子節點),後一種寫法表示採用自下而上的搜索方式(先找葉子節點而後找父節點)。 

  樹狀結構層次化查詢須要對樹結構的每個節點進行訪問而且不能重複,其訪問步驟爲:

imageimage

  大體意思就是掃描整個樹結構的過程即遍歷樹的過程,其用語言描述就是:

  步驟一:從根節點開始;

  步驟二:訪問該節點;

  步驟三:判斷該節點有無未被訪問的子節點,如有,則轉向它最左側的未被訪問的子節,並執行第二步,不然執行第四步; 

  步驟四:若該節點爲根節點,則訪問完畢,不然執行第五步; 

  步驟五:返回到該節點的父節點,並執行第三步驟。 

  除此以外,sys_connect_by_path函數是和connect  by 一塊兒使用的,在實戰中具體帶目的具體介紹!

實戰:最近作項目的組織結構,對於部門的各級層次顯示,因爲這部分掌握不牢固,用最笨的like模糊查詢解決了,雖然功能實現了,可是問題不少,如擴展性很差,稍微改下需求就要進行大改,不滿意最後對其進行了優化。在開發中能用數據庫解決的就不要用java去解決,這也是我一直保持的想法並堅持着。

      建立表:

   1: create table SYS_DEPT 
   2: (
   3:   dept_id         VARCHAR2(32) not null,
   4:   dept_name       VARCHAR2(128),
   5:   dept_code       VARCHAR2(32),
   6:   par_dept_id     VARCHAR2(32),
   7:   dept_leader     VARCHAR2(32),
   8:   dept_desc       VARCHAR2(256),
   9:   create_time     CHAR(19),
  10:   org_id          VARCHAR2(32),
  11:   dept_type       VARCHAR2(1),
  12:   order_id        NUMBER,
  13:   state           CHAR(1) default '1',
  14:   bqq_dept_id     VARCHAR2(128),
  15:   bqq_par_dept_id VARCHAR2(128)
  16: )
  17:  
  18: -- Add comments to the table
  19: comment on table SYS_DEPT
  20:   is '部門信息,和單位多對一';
  21: -- Add comments to the columns
  22: comment on column SYS_DEPT.dept_id
  23:   is '主鍵';
  24: comment on column SYS_DEPT.dept_name
  25:   is '名稱';
  26: comment on column SYS_DEPT.dept_code
  27:   is '編碼,用於遞歸';
  28: comment on column SYS_DEPT.par_dept_id
  29:   is '父級部門ID';
  30: comment on column SYS_DEPT.dept_leader
  31:   is '部門領導ID';
  32: comment on column SYS_DEPT.dept_desc
  33:   is '部門描述';
  34: comment on column SYS_DEPT.create_time
  35:   is 'yyyy-mm-dd HH:MM:SS';
  36: comment on column SYS_DEPT.org_id
  37:   is '單位ID';
  38: comment on column SYS_DEPT.dept_type
  39:   is '1:正式部門;2:虛擬部門(用於通信錄展現)';
  40: comment on column SYS_DEPT.order_id
  41:   is '排序字段';
  42: comment on column SYS_DEPT.state
  43:   is '0:無效;1:有效';
  44: comment on column SYS_DEPT.bqq_dept_id
  45:   is '企業qqdeptid';
  46: comment on column SYS_DEPT.bqq_par_dept_id
  47:   is '企業qq父類deptid';

  插入測試數據:

   1: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
   2: values ('40288ac45a3c1e8b015a3c28b4ae01d6', '客運部', '110', '-1', null, null, '2017-02-14 18:26:25', '402881e54c40d74d014c40d8407a0016', '1', 29, '1', null, null);
   3:  
   4: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
   5: values ('4028e4d35b5ca4ee015b60f98a1d59b3', '綜合室', '110001', '40288ac45a3c1e8b015a3c28b4ae01d6', null, null, '2017-04-12 15:03:38', '402881e54c40d74d014c40d8407a0016', '1', 63, '1', null, null);
   6:  
   7: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
   8: values ('4028e4d35b5ca4ee015b6134d9ff2946', '生產調度', '110001001', '4028e4d35b5ca4ee015b60f98a1d59b3', null, null, '2017-04-12 16:08:25', '402881e54c40d74d014c40d8407a0016', '1', 135, '1', null, null);
   9:  
  10: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  11: values ('4028e4d35b5ca4ee015b60f9fae95a44', '站務中心', '110002', '40288ac45a3c1e8b015a3c28b4ae01d6', null, null, '2017-04-12 15:04:07', '402881e54c40d74d014c40d8407a0016', '1', 64, '1', null, null);
  12:  
  13: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  14: values ('4028e4d35b5ca4ee015b613562be2a08', '東崗站', '110002001', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:09:00', '402881e54c40d74d014c40d8407a0016', '1', 136, '1', null, null);
  15:  
  16: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  17: values ('4028e4d35b5ca4ee015b6135f9de2aca', '焦家灣站', '110002002', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:09:39', '402881e54c40d74d014c40d8407a0016', '1', 137, '1', null, null);
  18:  
  19: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  20: values ('4028e4d35b5ca4ee015b6136a3e22bb2', '拱星墩站', '110002003', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:10:22', '402881e54c40d74d014c40d8407a0016', '1', 138, '1', null, null);
  21:  
  22: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  23: values ('4028e4d35b5ca4ee015b613723bb2c5f', '省氣象局站', '110002004', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:10:55', '402881e54c40d74d014c40d8407a0016', '1', 139, '1', null, null);
  24:  
  25: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  26: values ('4028e4d35b5ca4ee015b6137a5772d06', '五里鋪站', '110002005', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:11:28', '402881e54c40d74d014c40d8407a0016', '1', 140, '1', null, null);
  27:  
  28: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  29: values ('4028e4d35b5ca4ee015b6137e4e72d57', '蘭州大學站', '110002006', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:11:44', '402881e54c40d74d014c40d8407a0016', '1', 141, '1', null, null);
  30:  
  31: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  32: values ('4028e4d35b5ca4ee015b613840112dd0', '東方紅廣場站', '110002007', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:12:08', '402881e54c40d74d014c40d8407a0016', '1', 142, '1', null, null);
  33:  
  34: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  35: values ('4028e4d35b5ca4ee015b6138765c2e12', '省政府站', '110002008', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:12:21', '402881e54c40d74d014c40d8407a0016', '1', 143, '1', null, null);
  36:  
  37: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  38: values ('4028e4d35b5ca4ee015b6138b84b2e68', '西關站', '110002009', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:12:38', '402881e54c40d74d014c40d8407a0016', '1', 145, '1', null, null);
  39:  
  40: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  41: values ('4028e4d35b5ca4ee015b6139390e2f06', '文化宮站', '110002010', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:13:11', '402881e54c40d74d014c40d8407a0016', '1', 146, '1', null, null);
  42:  
  43: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  44: values ('4028e4d35b5ca4ee015b613980a82f61', '小西湖站', '110002011', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:13:30', '402881e54c40d74d014c40d8407a0016', '1', 147, '1', null, null);
  45:  
  46: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  47: values ('4028e4d35b5ca4ee015b6139c1dc2fb4', '七里河站', '110002012', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:13:46', '402881e54c40d74d014c40d8407a0016', '1', 148, '1', null, null);
  48:  
  49: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  50: values ('4028e4d35b5ca4ee015b613a24853047', '西站十字站', '110002013', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:14:12', '402881e54c40d74d014c40d8407a0016', '1', 149, '1', null, null);
  51:  
  52: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  53: values ('4028e4d35b5ca4ee015b613a81f030ce', '蘭州西站北廣場站', '110002014', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:14:36', '402881e54c40d74d014c40d8407a0016', '1', 150, '1', null, null);
  54:  
  55: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  56: values ('4028e4d35b5ca4ee015b613ad627313d', '土門墩站', '110002015', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:14:57', '402881e54c40d74d014c40d8407a0016', '1', 151, '1', null, null);
  57:  
  58: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  59: values ('4028e4d35b5ca4ee015b613b394c31c6', '馬灘站', '110002016', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:15:22', '402881e54c40d74d014c40d8407a0016', '1', 152, '1', null, null);
  60:  
  61: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  62: values ('4028e4d35b5ca4ee015b613b9051325e', '蘭州海關站', '110002017', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:15:45', '402881e54c40d74d014c40d8407a0016', '1', 153, '1', null, null);
  63:  
  64: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  65: values ('4028e4d35b5ca4ee015b613c286b332e', '蘭州城市學院(省科技館)站', '110002018', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:16:24', '402881e54c40d74d014c40d8407a0016', '1', 154, '1', null, null);
  66:  
  67: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  68: values ('4028e4d35b5ca4ee015b613c806933a3', '深安大橋南站', '110002019', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:16:46', '402881e54c40d74d014c40d8407a0016', '1', 155, '1', null, null);
  69:  
  70: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  71: values ('4028e4d35b5ca4ee015b613cdf98342c', '陳官營站', '110002020', '4028e4d35b5ca4ee015b60f9fae95a44', null, null, '2017-04-12 16:17:11', '402881e54c40d74d014c40d8407a0016', '1', 157, '1', null, null);
  72:  
  73: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  74: values ('4028e4d35b5ca4ee015b60fa3e2f5a94', '乘務中心', '110003', '40288ac45a3c1e8b015a3c28b4ae01d6', null, null, '2017-04-12 15:04:24', '402881e54c40d74d014c40d8407a0016', '1', 65, '1', null, null);
  75:  
  76: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  77: values ('4028e4d35b5ca4ee015b613d738d34f4', '陳官營車場組', '110003001', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:17:48', '402881e54c40d74d014c40d8407a0016', '1', 158, '1', null, null);
  78:  
  79: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  80: values ('4028e4d35b5ca4ee015b613defed359e', '東崗車場組', '110003002', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:18:20', '402881e54c40d74d014c40d8407a0016', '1', 159, '1', null, null);
  81:  
  82: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  83: values ('4028e4d35b5ca4ee015b613e42ae3612', '第一車隊', '110003003', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:18:41', '402881e54c40d74d014c40d8407a0016', '1', 161, '1', null, null);
  84:  
  85: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  86: values ('4028e4d35b5ca4ee015b613e7a50366c', '第二車隊', '110003004', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:18:56', '402881e54c40d74d014c40d8407a0016', '1', 162, '1', null, null);
  87:  
  88: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  89: values ('4028e4d35b5ca4ee015b613ebc8e36c1', '第三車隊', '110003005', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:19:13', '402881e54c40d74d014c40d8407a0016', '1', 163, '1', null, null);
  90:  
  91: insert into SYS_DEPT (DEPT_ID, DEPT_NAME, DEPT_CODE, PAR_DEPT_ID, DEPT_LEADER, DEPT_DESC, CREATE_TIME, ORG_ID, DEPT_TYPE, ORDER_ID, STATE, BQQ_DEPT_ID, BQQ_PAR_DEPT_ID)
  92: values ('4028e4d35b5ca4ee015b613eff483729', '第四車隊', '110003006', '4028e4d35b5ca4ee015b60fa3e2f5a94', null, null, '2017-04-12 16:19:30', '402881e54c40d74d014c40d8407a0016', '1', 164, '1', null, null);

  在這張表中有三個字段:dept_id 部門主鍵id;dept_name  部門名稱;dept_code 部門編碼;par_dept_id   父級部門id(首級部門爲 -1);

  1. 當前節點遍歷子節點(遍歷當前部門下全部子部門包括自己)
       1: select t.dept_id, t.dept_name, t.dept_code, t.par_dept_id, level 
       2: from SYS_DEPT t 
       3: start with t.dept_id = '40288ac45a3c1e8b015a3c28b4ae01d6' 
       4: connect by prior t.dept_id = t.par_dept_id 
       5: order by level, t.dept_code 

    結果:

    dept_id=40288ac45a3c1e8b015a3c28b4ae01d6 是客運部主鍵,對其下的全部子部門進行遍歷,同時用  order by level,dept_code 進行排序 以便達到實際生活中想要的數據;共31條數據,部分數據如圖所示:

    可是:

      有問題啊,若是你想在上面的數據中獲取層級在2也就是level=2的全部部門,發現剛開始的時候介紹的語言不起做用?而且會報ORA-00933:sql命令未正確結束,why?

    這個我暫時也沒有獲得研究出理論知識,可是改變下where level='2'的位置發現纔會能夠的。錯誤的和正確的sql咱們對比一下,之後會用就行,要是路過的大神知道爲何,還請告知下,萬分感謝!

    錯誤sql:

       1: select t.dept_id, t.dept_name, t.dept_code, t.par_dept_id, level 
       2: from SYS_DEPT t 
       3: start with t.dept_id = '40288ac45a3c1e8b015a3c28b4ae01d6' 
       4: connect by prior t.dept_id = t.par_dept_id 
       5: where level = '2' 
       6: order by level, t.dept_code 
       7:  
    正確sql:

       1: select t.dept_id, t.dept_name, t.dept_code, t.par_dept_id, level 
       2: from SYS_DEPT t 
       3: where level = '2' 
       4: start with t.dept_id = '40288ac45a3c1e8b015a3c28b4ae01d6' 
       5: connect by prior t.dept_id = t.par_dept_id 
       6: order by level, t.dept_code 

     


    固然了,這個對其餘形式的where過濾全部返回記錄沒有影響的,這個只是一個例外!

  2. sys_connect_by_path函數求父節點到子節點路徑
    簡單介紹下,在oracle中sys_connect_by_path與connect by 一塊兒使用,也就是先要有或創建一棵樹,不然無用還會報錯。它的主要做用體如今path上即路徑,是能夠吧一個父節點下的全部節點經過某個字符區分,而後連接在一個列中顯示。
    sys_connect_by_path(column,clear),其中column是字符型或能自動轉換成字符型的列名,它的主要目的就是將父節點到當前節點的「path」按照指定的模式出現,char能夠是單字符也能夠是多字符,但不能使用列值中包含的字符,並且這個參數必須是常量,且不容許使用綁定變量,clear不要用逗號。
    文字容易讓人疲勞,放圖和代碼吧!

       1: select sys_connect_by_path(t.dept_name,'-->'),t.dept_id, t.dept_name, t.dept_code, t.par_dept_id, level 
       2: from SYS_DEPT t  
       3: start with t.dept_id = '40288ac45a3c1e8b015a3c28b4ae01d6' 
       4: connect by prior t.dept_id = t.par_dept_id 
       5: order by level, t.dept_code 

    結果:

 

下面以最簡單的狀況進行示例說明:

SELECT t.f_id, SYS_CONNECT_BY_PATH(t.f_id, '\') AS con_code,
       SYS_CONNECT_BY_PATH(t.f_name, '\') AS con_name
FROM   表名 t
START  WITH t.f_pid IS NULL
CONNECT BY PRIOR t.f_id = t.f_pid;

說明:其中的f_id爲標識碼,f_pid爲父節點標識碼,f_name爲名稱

相關文章
相關標籤/搜索