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 대절님

댓글을 달아 주세요



티스토리 툴바