일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- MySQL
- iBATIS
- Struts
- swingx
- PLSQL
- Android
- MFC
- phonegap
- appspresso
- jQuery
- rowspan
- Google Map
- dock
- JSON
- node.js
- 선택적조인
- tomcat
- jsr 296
- WebLogic
- oracle
- GPS
- Eclipse
- 가우스
- ibsheet
- sencha touch
- JDOM
- Ajax
- PHP
- 전자정부프레임워크
- Spring
Archives
- Today
- Total
Where The Streets Have No Name
oracle 9iR2 - SYS_CONNECT_BY_PATH() 함수 본문
사용법은 SYS_CONNECT_BY_PATH(컬럼명, 구분자)
SELECT LPAD('' '', 2*LEVEL-1)||SYS_CONNECT_BY_PATH(ename, ''/'') "Path"
FROM scott.emp
START WITH ename = ''KING''
CONNECT BY PRIOR empno = mgr;
Path
------------------------------------------------------------
/KING
/KING/JONES
/KING/JONES/SCOTT
/KING/JONES/SCOTT/ADAMS
/KING/JONES/FORD
/KING/JONES/FORD/SMITH
/KING/BLAKE
/KING/BLAKE/ALLEN
/KING/BLAKE/WARD
/KING/BLAKE/MARTIN
/KING/BLAKE/TURNER
/KING/BLAKE/JAMES
/KING/CLARK
/KING/CLARK/MILLER
14 rows selected.
문제는 보통은 부모레벨로부터 자식레벨이 나오는것을 위에서와 같이 어떤 자식
이 부모를 참조하는지를 나타내는것이네요..
머리를 굴려보니...
위와 반대로 하면 어떨까요...
그래서..
START WITH 최상위레벨 ----> 없으면 모든 ROW가 시작행
CONNECT BY 자식 = 부모 ----> CONNECT BY 부모 = 자식
이렇게 하면 최하위레벨이 최상위레벨이 되는거죠...
이렇게 해서 QUERY해보면..
SELECT ACODE, SYS_CONNECT_BY_PATH(ACODE,''/'') "PATH"
FROM TBLA
CONNECT BY PRIOR p_ACODE = ACODE
ACODE PATH
---------------------------------------------------
m9 , /m9
m7 , /m9/m7
m2 , /m9/m7/m2
m0 , /m9/m7/m2/m0
................중략.........
m6 , /m6
m1 , /m6/m1
m0 , /m6/m1/m0
m4 , /m4
m1 , /m4/m1
m0 , /m4/m1/m0
m3 , /m3
m1 , /m3/m1
m0 , /m3/m1/m0
SELECT LPAD('' '', 2*LEVEL-1)||SYS_CONNECT_BY_PATH(ename, ''/'') "Path"
FROM scott.emp
START WITH ename = ''KING''
CONNECT BY PRIOR empno = mgr;
Path
------------------------------------------------------------
/KING
/KING/JONES
/KING/JONES/SCOTT
/KING/JONES/SCOTT/ADAMS
/KING/JONES/FORD
/KING/JONES/FORD/SMITH
/KING/BLAKE
/KING/BLAKE/ALLEN
/KING/BLAKE/WARD
/KING/BLAKE/MARTIN
/KING/BLAKE/TURNER
/KING/BLAKE/JAMES
/KING/CLARK
/KING/CLARK/MILLER
14 rows selected.
문제는 보통은 부모레벨로부터 자식레벨이 나오는것을 위에서와 같이 어떤 자식
이 부모를 참조하는지를 나타내는것이네요..
머리를 굴려보니...
위와 반대로 하면 어떨까요...
그래서..
START WITH 최상위레벨 ----> 없으면 모든 ROW가 시작행
CONNECT BY 자식 = 부모 ----> CONNECT BY 부모 = 자식
이렇게 하면 최하위레벨이 최상위레벨이 되는거죠...
이렇게 해서 QUERY해보면..
SELECT ACODE, SYS_CONNECT_BY_PATH(ACODE,''/'') "PATH"
FROM TBLA
CONNECT BY PRIOR p_ACODE = ACODE
ACODE PATH
---------------------------------------------------
m9 , /m9
m7 , /m9/m7
m2 , /m9/m7/m2
m0 , /m9/m7/m2/m0
................중략.........
m6 , /m6
m1 , /m6/m1
m0 , /m6/m1/m0
m4 , /m4
m1 , /m4/m1
m0 , /m4/m1/m0
m3 , /m3
m1 , /m3/m1
m0 , /m3/m1/m0