본문 바로가기

IT/oracle&mysql

ORACLE 계층형 데이터 SYS_CONNECT_BY_PATH

SMALL

ORACLE GRID형태의 계층형 데이타

계층형 데이타

Tree 형태의 구조다


이번에 설명할 계층구조는 한컬럼의 Tree형 데이타가아닌

여러컬럼의 Tree형 데이터를 표현하려고 한다.

원하는 결과물

Java Script 쪽은 의 코드는 왠만큼 구현 해봤고

거의 View단에서 처리를 하는 스타일이기 때문에 

Oracle에서는 아직 실력이 부족하다.

물론 Jqgrid 를 사용하여 여러 컬럼에 계층형 구조를 만들때 Java나 Js로 구현 가능하지만

속도문제가 발생하기 때문에 Oracle에서 처리하는 방식으로 구현을 하였다.

물론 도움을 받고 처리를 하였지만.


Connect by 를 사용하여 각 로우의 계층 구조로 데이타를 조회하였다.

여기까지는 Connect By의 구조를 이해한다면 쉽게 구현 할 수 있었을 것이다.

여기서 부터 해결책이 나질 않아 도움을 요청 받았다. 

총괄자,내검원,담장자 등의 내용을 제거 하고

 사무소, 청에 대해서 데이타를 조회하려고 한다.

1. WITH 명칭 AS()문장을 사용하여 SQL 생성

2. SYS_CONNECT_BY_PATH("사용할 컬럼명" , '/') 구분자 사용

WITH A AS(

SELECT ... FROM ... 

) , B AS (

SELECT SYS_CONNECT_BY_PATH('컬럼명' , '구분자') ATREE

FROM A

START WITH 시작값 CONNECT BY PRIOR 조건절

)   


 SELECT 

REGEXP_SUBSTR(ATREE, '[^/]+' , 1 , 2) AS LVL_02 , 

REGEXP_SUBSTR(ATREE, '[^/]+' , 1 , 3) AS LVL_03 , 

REGEXP_SUBSTR(ATREE, '[^/]+' , 1 , 4) AS LVL_04 , 

REGEXP_SUBSTR(ATREE, '[^/]+' , 1 , 5) AS LVL_05 , 

FROM B

-핵심-

WITH()절

SYS_CONNECT_BY_PATH('컬럼명' , '구분자')

REGEXP_SUBSTR(ATREE, '[^/]+', 1, 3)



이글을 본고 문조건 구현 할 수 있진 않겠지만 포인트는 집어 줄 수 있을 거 같은 생각이 든다



Sample Sql


Connect by + Sys_Connect_by_path 를 사용

가로형태의 계층 구조를 표현하고자 할때 사용한다.

JqGrid에서 컬럼 별로 표현하고자 할때 사용하면 도움이 될거 같다.






LIST