[SQL] 오라클 계층 구조 조회 쿼리
계층 구조는 거의 모든 시스템에서 다 사용된다. 게시판, 조직도, 부서, 회계, 공통 코드
오라클은 START WITH, CONNECT BY PRIOR 등의 키워드로 할 수있다.
주의) 게시판의 글 전체에 대해 계층구조를 가져오면 메모리가 부족한 오류를 갖게 된다. 그래서 글을
선택했을 때, 댓글, 답글만 가져오는 구조로 기능을 설계하던지, 게시판 목록에 표시할 글의 갯수를
처음부터 제한하면 좋다.
구문 | 설명 |
WHERE | 데이터를 가져온 뒤 마지막으로 조건절에 맞게 정리 |
START WITH | 어떤 데이터로 계층구조를 지정하는지 지정 |
CONNECT BY | 각 행들의 연결 관계를 설정 |
* START WITH 는 가장 처음에 데이터를 거르는 플랜을 타게 되고,
따라서 이 컬럼에는 인덱스가 걸려있어야 성능을 보장받습니다.
* CONNECT BY 절의 결과에는 LEVEL 이라는 컬럼이 있으며,
이는 계층의 깊이를 의미합니다.
[전제 조건]
- CATEGORY 테이블에는 일련번호(CODE)가 있어야 하고, 부모 일련번호(PCODE)가 있어야 한다.
CODE : 코드 인덱스 필수
PCODE : 부모 코드. CODE가 기록된다. 인덱스 필수
NAME : 코드
DESC : 코드 설명
[SQL] 목록 전체를 가져오는 쿼리
SELECT CODE
, PCODE
, NAME
, DESC
FROM CATEGORY
[SQL] 계층 구조를 가져오는 쿼리, 편리를 위해 LPAD 사용
SELECT
LEVEL,
CODE ,
PCODE ,
LPAD('- ', (LEVEL-1)* 5) || NAME AS CATE_NM,
DEPTH
FROM
CATEGORY bc
START WITH
PCODE IS NULL
CONNECT BY
PRIOR CODE = PCODE
댓글
댓글 쓰기