공부/sql

계층적 쿼리 SYS_CONNECT_BY_PATH

hansuya 2025. 5. 28. 14:49

문법
sys_connect_by_path(colum, char)

sys_connect_by_path 는 계층적 쿼리에서만 유효하다
connect_by 조건절에 의해 리턴 된 각 행에 대해 char 값으로 분리 된 컬럼 값을 루트에서 노드로 컬럼의 값의 경로를 리턴한다
column 과 char 는 모두 CHAR, VARCHAR2< NCHAR 또는  NVARCHAR2 데이터 유형 중 하나여야 하며, 반환 된 문자열은 VARCHAR2 데이터 유형이고 column 과 동일하 문자 집합이다.

예제)
select lpad(' ', 2*level -1) || sys_connect_by_path(last_name, '/') "path"
from employees
start with last_name = 'Kochar'
connect by prior employee_id = manager_id
;
>>>>>
/Kochhar
    /Kochhar/Greenberg
        /Kochhar/Greenberg/Faviet
        /Kochhar/Greenberg/Chen
        /Kochhar/Greenberg/Sciarra
        /Kochhar/Greenberg/Urman
        /Kochhar/Greenberg/Popp
    /Kochhar/Whalen
    /Kochhar/Mavris
    /Kochhar/Baer
    /Kochhar/Higgins
        /Kochhar/Higgins/Gietz

첫번째줄 select 를 보면 sys_connect_by_path(last_name, '/') 이 쓰인 것을 볼 수 있다
last_name을 계층으로 사용할 것이고, '/'로 구분한다
계층으로 나누는 것은 3번째 줄에 있는 start with connect by prior 에 의해서 나눠지고 그 값들을 sys_connect_by_path 에서 구분하는것
(????)

'공부 > sql' 카테고리의 다른 글

고유 제약 조건이 설정된 열에 중복된 값이 있는지 확인  (0) 2025.05.29
오라클 Explain plan for  (0) 2025.05.28
ROLLUP  (0) 2025.05.28
ROW_NUMBER() OVER(PARTITION BY - ORDER BY)  (0) 2025.05.28
CONNECT BY LEVEL  (0) 2025.05.28