Oracle 21강

programing/Oracle 2009.04.13 21:37


1. 사장 밑으로 레벨 출력
>select empno, ename, mgr, level
from emp
start with mgr is null    <-- mgr ename = 'KING'
connect by prior empno = mgr;

>save t
>@t

2. 'JONES'의 부하직원
select empno, ename, mgr, level
from emp
start with empno = 7566
connect by prior empno = mgr;
-- JONES를 1레벨로 하고 출력, 최하위 레벨까지 출력


3. 'JONES'의 부하직원
select empno, ename, mgr, level
from emp
where mgr = 7566
start with mgr is null
connect by prior empno = mgr;
-- 전체에서 mgr= 7566인 사람만 출력, where조건을 나중에 실행한다는것을 알수 있음.
where절에 join이 쓰인경우엔 where먼저 수행

4. 'JONES'만 제외하고 전체계층 출력
>select empno, ename, mgr, level
from emp
where ename != 'JONES'
start with mgr is null
connect by prior empno=mgr;

5.'JONES'를 포함한 부하직원까지 모두 빼고 출력
>select empno, ename, mgr, level
from emp
start with mgr is null
connect by prior empno=mgr
and ename != 'JONES';

6. 'ADAMS'의 상사를 역순으로 출력
>select empno, ename, mgr, level
from emp
start with ename = 'ADAMS'
connect by prior mgr=empno;

7. 조직도 출력
>select lpad(' ', 3*level-3) || ename as "조직"
from emp
start with ename = 'KING'
connect by prior empno=mgr;

8. 경로 출력
select empno, ename, mgr, level, sys_connect_by_path(ename,'/') as "path"
from emp
start with mgr is null
connect by prior empno=mgr

LEVEL 함수
CONNECT_BY_ISLEAF  더 이상 LEAF 데이터가 없으면 1, 있으면 0을 반환
CONNECT_BY_ISCYCLE  root 데이터이면 1, 아니면 0을 반환
CONNECT_BY_ROOT  각 데이터의 root값과 LEVEL 값을 반환

 

 

'programing > Oracle' 카테고리의 다른 글

Oracle 23강  (0) 2009.04.13
Oracle 22강  (0) 2009.04.13
Oracle 21강  (0) 2009.04.13
Oracle 20강  (0) 2009.04.13
Oracle 19강  (0) 2009.04.13
Oracle 18강  (0) 2009.04.13
Posted by 대절님

댓글을 달아 주세요