계층형 쿼리에서 하위 레벨의 특정 컬럼들을 한 줄로 표현할 때 사용
ex)
LEVEL COLNM
1 A
2 A1
2 A2
2 A3
1 B
2 B1
2 B2
2 B3
COLNM SYS_CONNECT_BY_PATH
A A1,A2,A3
B B1,B2,B3
모든 사람들이 접근 가능하고 테이블 create하지 않고 조회할 수 있는 scott/tiger로 작업
---------------------------------------------------------------------
SYS_CONNECT_BY_PATH
---------------------------------------------------------------------
SELECT
DEPTNO
,SUBSTR (MAX (SYS_CONNECT_BY_PATH (ename, ',')), 2) ENAME
FROM (
SELECT
DEPTNO
,ENAME
,ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY ENAME) AS RNO
FROM EMP)
START WITH RNO = 1
CONNECT BY PRIOR RNO = RNO-1
AND PRIOR DEPTNO = DEPTNO
GROUP BY DEPTNO
ORDER BY DEPTNO
* 퍼포먼스면에서 문제가 많다고들 한다.
꼭 계층형 쿼리를 써야 하는 부분이 아니라면, 다른 함수들을 사용하는 것이 좋겠지.
---------------------------------------------------------------------
XMLELEMENT
---------------------------------------------------------------------
SELECT
DEPTNO
,SUBSTR(XMLAGG(XMLELEMENT(A,','|| ENAME) ORDER BY ENAME).EXTRACT('//text()'),2) ENAME
FROM EMP
GROUP BY DEPTNO;
---------------------------------------------------------------------
WM_CONCAT---------------------------------------------------------------------
SELECT
A.DEPTNO
,MAX(A.ENAME) ENAME
FROM (
SELECT
DEPTNO
,WM_CONCAT(ENAME) OVER(PARTITION BY DEPTNO ORDER BY ENAME) ENAME
FROM EMP) A
GROUP BY DEPTNO;
WM_CONCAT---------------------------------------------------------------------
SELECT
A.DEPTNO
,MAX(A.ENAME) ENAME
FROM (
SELECT
DEPTNO
,WM_CONCAT(ENAME) OVER(PARTITION BY DEPTNO ORDER BY ENAME) ENAME
FROM EMP) A
GROUP BY DEPTNO;
댓글 없음:
댓글 쓰기