oracle 删除用户 递归,ORACLE递归查询遍历详解
Oracle 實在太強了,本篇文章詳細介紹了Oracle的遞歸查詢語法,利用此語法,可以方便地實現遞歸的雙向查詢:
-- Tirle??????? : Recursion query for TREE with "connect by/start with"
-- Author?????? : Rake Gao
-- Create Date : 2005-08-22
-- Version????? : 2.0
-- Last Modify : 2005-08-22
目 錄
一、測試準備
二、實現各種查詢要求
三、要點總結
正 文
一、測試準備
1、先假設有如下部門結構。
1
/ /
2??? 3
//??? /|/
4 5 6 7 8
2、然后建立測試表和數據。
drop table t_dept_temp;
create table t_dept_temp(
DEPT_ID??? NUMBER(2)??? NOT NULL,
PARENT_ID NUMBER(2)??? ,
DEPT_NAME VARCHAR2(10) ,
AMOUNT???? NUMBER(3)?????????? --人數
);
delete t_dept_temp;
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (1,null,'1'??? ,2);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (2,1?? ,'1-2' ,15);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (3,1?? ,'1-3' ,8);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (4,2?? ,'1-2-4',10);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (5,2?? ,'1-2-5',9);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (6,3?? ,'1-3-6',17);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (7,3?? ,'1-3-7',5);
insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (8,3?? ,'1-3-8',6);
commit;
SQL> select * from t_dept_temp;
DEPT_ID PARENT_ID DEPT_NAME AMOUNT
------- --------- ---------- ------
1?????????? 1?????????????? 2
2???????? 1 1-2??????????? 15
3???????? 1 1-3???????????? 8
4???????? 2 1-2-4????????? 10
5???????? 2 1-2-5?????????? 9
6???????? 3 1-3-6????????? 17
7???????? 3 1-3-7?????????? 5
8???????? 3 1-3-8?????????? 6
3、調整一下輸出格式
col DEPT_ID format A10;
二、接下來實現各種查詢要求
1、部門2及其所有下級部門。
SELECT LPAD(' ',2*(LEVEL - 1), ' ')||DEPT_ID AS DEPT_ID,
PARENT_ID,DEPT_NAME,AMOUNT
FROM t_dept_temp
CONNECT BY PARENT_ID = PRIOR DEPT_ID -- 找出所有PARENT_ID等于當前記錄DEPT_ID的記錄。
START WITH DEPT_ID = 2??????????????? -- 從部門2開始遞歸查詢。
;
DEPT_ID??? PARENT_ID DEPT_NAME AMOUNT
---------- --------- ---------- ------
2????????????????? 1 1-2??????????? 15
4??????????????? 2 1-2-4????????? 10
5??????????????? 2 1-2-5?????????? 9
2、部門4及其所有上級部門
SELECT LPAD(' ',2*(LEVEL - 1), ' ')||DEPT_ID AS DEPT_ID,
PARENT_ID,DEPT_NAME,AMOUNT
FROM T_DEPT_TEMP
CONNECT BY PRIOR PARENT_ID = DEPT_ID -- 找出所有DEPT_ID等于當前記錄PARENT_ID的記錄
START WITH DEPT_ID = 4?????????????? -- 從部門4開始遞歸查詢。
;
DEPT_ID??? PARENT_ID DEPT_NAME AMOUNT
---------- --------- ---------- ------
4????????????????? 2 1-2-4????????? 10
2??????????????? 1 1-2??????????? 15
1??????????????? 1?????????????? 2
總結
以上是生活随笔為你收集整理的oracle 删除用户 递归,ORACLE递归查询遍历详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle恢复drop建的表首次,案例
- 下一篇: oracle动态采样超时,解决 ORAC