본문 바로가기

프로그래밍

재귀 순환 호출 쿼리

프로젝트 진행중 유사 테이블 작성이 많아짐에 따라 다음의 쿼리를 생성했다.
재귀 호출 유형의 테이블 작성후 데이타 쿼리시, 트리 형태의 데이타 구조 쿼리에 대해 알아본다.

일명, 재귀 순환 호출 쿼리!!
간단하게 테이블 구조는 아래와 같다.

- 테이블
create table CATEGORY
(
  CATEGORY_SRL             NUMBER(10) not null,
  SUP_CATEGORY_SRL     NUMBER(10),
  CATEGORY_NAME         VARCHAR2(30) not null
)
tablespace PROJECT_
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 1M
    next 1M
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

위 테이블은 일련번호의 고유번호와 부모 일련번호를 가르키는 코드 그리고 해당 카테고리에 대한 이름으로 구성된 테이블이다.
고유번호와 부모키를 가지고 단계뿐 아니라 그룹을 함께 구해보자.

-재귀 순환 호출 쿼리
SELECT
    ROWNUM no_,
    LPAD(' ',(LEVEL-1)*4)||category_srl AS category_code,
    LEVEL,
    category_name,
    sup_category_srl AS sup_category_code,
    DECODE(LEVEL,1, category_srl,
                 2, sup_category_srl,
                 3, PRIOR sup_category_srl) AS group_code
FROM g
    category
START WITH
    sup_category_srl IS NULL
CONNECT BY PRIOR
    category_srl = sup_category_srl
ORDER BY
    group_code ASC