| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 튜닝
- 데이터베이스
- Tomcat
- 에러
- 엑셀
- 오라클
- 성능
- miplatform
- 기타소득
- 함수
- 오류
- JavaScript
- 마이플랫폼
- 이클립스
- 도서
- 회계
- Excel
- 톰캣
- 태그를 입력해 주세요.
- 자바
- JEUS
- oracle
- Report Designer
- Eclipse
- Book
- java
- MIP
- DB
- error
- 한글
Archives
- Today
- Total
어느 가을날의 전환점
ORACLE|Oracle10g - CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, CONNECT_BY_ISLEAF 본문
Database/Oracle
ORACLE|Oracle10g - CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, CONNECT_BY_ISLEAF
어느가을빛 2011. 7. 25. 10:22Oracle10g에서 CONNECT BY의 새로운 기능들
오라클팁의 "계층 구조의 조회(Hierarchical Queries)" 강좌에서 CONNECT BY 와 START WITH를 상관관계 쿼리에 대해서 소개를 했었습니다.
Oracle10g 부터 CONNECT BY 절에서 제공하는 CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, CONNECT_BY_ISLEAF 기능에 대해서 알아보겠습니다.
상관관계 쿼리 예제
아래 예제와 같이 계층구조로 조회 할 수 있습니다.
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
ENAME EMPNO MGR JOB
-------------------- ---------- ---------- ---------
KING 7839 PRESIDENT
JONES 7566 7839 MANAGER
SCOTT 7788 7566 ANALYST
ADAMS 7876 7788 CLERK
FORD 7902 7566 ANALYST
SMITH 7369 7902 CLERK
CONNECT_BY_ROOT
상관관계 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있습니다.
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
CONNECT_BY_ROOT empno "Root empno", level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
ENAME EMPNO Root empno LEVEL
-------------------- ---------- ---------- ----------
KING 7839 7839 1
JONES 7566 7839 2
SCOTT 7788 7839 3
ADAMS 7876 7839 4
FORD 7902 7839 3
SMITH 7369 7839 4
SYS_CONNECT_BY_PATH
상관관계 쿼리에서 현재 로우 까지의 PATH 정보를 쉽게 얻어 올 수 있습니다.
SQL> COL path FORMAT A40
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
SYS_CONNECT_BY_PATH(ename, '/') "Path"
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
ENAME EMPNO Path
-------------------- ---------- -------------------------------
KING 7839 /KING
JONES 7566 /KING/JONES
SCOTT 7788 /KING/JONES/SCOTT
ADAMS 7876 /KING/JONES/SCOTT/ADAMS
FORD 7902 /KING/JONES/FORD
SMITH 7369 /KING/JONES/FORD/SMITH
CONNECT_BY_ISLEAF
상관관계 쿼리에서 로우의 최하위 레벨 여부를 반환 합니다.
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
CONNECT_BY_ISLEAF "leaf", level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY NOCYCLE PRIOR empno=mgr;
ENAME EMPNO leaf LEVEL
-------------------- ---------- ---------- ----------
KING 7839 0 1
JONES 7566 0 2
SCOTT 7788 0 3
ADAMS 7876 1 4
FORD 7902 0 3
SMITH 7369 1 4
#출처: http://www.oracleclub.com/lecture/1903
'Database > Oracle' 카테고리의 다른 글
| ORACLE|Oracle Instant Client (0) | 2011.08.03 |
|---|---|
| ORACLE|WITH 구문 (0) | 2011.07.25 |
| ORACLE|LEAD(), LAG() 함수 - 특정 컬럼의 지정한 숫자 다음/이전행 데이터 리턴. (0) | 2011.07.25 |
| ORACLE|자율 트랜잭션(Autonomous Transaction) - 채번 시 활용 (0) | 2011.07.25 |
| ORACLE|조회 쿼리(Query)에서 와일드카드(Wildcards) 문자열로 사용하기 (0) | 2011.06.07 |
Comments