DB/Oracle

CONNECT BY 뎁스구조 쿼리

밍꿔 2020. 2. 14. 13:12


반응형

 

 

트리구조, 뎁스구조에서 Full Path를 추출하는 쿼리를 오라클에서는

 

CONNECT BY를 사용하여 조회 할 수 있다.

 

SELECT  
  TC2.CD 
  ,TC2.UP_CD 
  ,TC2.CD_NM 
  ,LTRIM (SYS_CONNECT_BY_PATH (TC2.CD_NM, '>'), '>') AS CD_NM_FULL  
FROM TB_CODE TC2 
--START WITH TC2.CD = 'AB'   
START WITH TC2.CD IN('AA','AB','AC')  
CONNECT BY PRIOR TC2.CD = TC2.UP_CD

 

추가로, 고객사 요건으로 기존에 Full Path경로를 따로 담는 컬럼에 대해 추가 요청이 들어왔을때

 

기존에 등록되어 있는 데이터를 통해 Full Path값을 업데이트 해주는 쿼리는 아래와 같다.

 

UPDATE TB_CODE TT
    SET
        CD_NM_FULL = (            
                        SELECT
                            V.CD_NM_FULL
                        FROM (
                            SELECT 
                                TC2.CD
                                ,TC2.UP_CD
                                ,TC2.CD_NM
                                ,LTRIM (SYS_CONNECT_BY_PATH (TC2.CD_NM, '>'), '>') AS CD_NM_FULL 
                            FROM TB_CODE TC2
                            --START WITH TC2.CD = 'AB'  
                            --START WITH TC2.CD IN(SELECT SUBSTR(CD,0,2) AS CD FROM TB_CODE GROUP BY SUBSTR(CD,0,2))
                            START WITH TC2.CD IN('AA','AB','AC') 
                            CONNECT BY PRIOR TC2.CD=TC2.UP_CD
                        )V
                        WHERE V.CD = TT.CD
                    )

 

START WITH 비교 하는 절 IN절 안에 서브쿼리를 통해 한번에 update를 시도 하니 쿼리도 쿼리고, 데이터량이 많다면

 

매우 느려지기 때문에 실제 문자열값을 세팅해주는걸 권장한다.

 

 

 

반응형