728x90
반응형
728x170
■ CTE 재귀 호출을 사용하는 방법을 보여준다.
▶ 예제 코드 (SQL)
CREATE TABLE MENU
(
ID INT
,PARENT_ID INT
,NAME VARCHAR(50)
);
INSERT INTO MENU VALUES (1, 0, '메뉴1');
INSERT INTO MENU VALUES (2, 0, '메뉴2');
INSERT INTO MENU VALUES (3, 1, '메뉴3');
INSERT INTO MENU VALUES (4, 1, '메뉴4');
INSERT INTO MENU VALUES (5, 1, '메뉴5');
INSERT INTO MENU VALUES (6, 5, '메뉴6');
INSERT INTO MENU VALUES (7, 2, '메뉴7');
INSERT INTO MENU VALUES (8, 2, '메뉴8');
WITH CTE(ID, PARENT_ID, NAME, DISPLAY_ORDER, TREE_PATH)
AS
(
SELECT
ID
,PARENT_ID
,NAME
,'' || ID DISPLAY_ORDER
,'' || NAME TREE_PATH
FROM MENU
WHERE PARENT_ID = 0
UNION ALL
SELECT
A.ID
,A.PARENT_ID
,A.NAME
,B.DISPLAY_ORDER || ' > ' || A.ID DISPLAY_ORDER
,B.TREE_PATH || ' > ' || A.NAME TREE_PATH
FROM MENU A, CTE B
WHERE A.PARENT_ID = B.ID
)
SELECT
NAME
,TREE_PATH
FROM CTE
ORDER BY DISPLAY_ORDER;
728x90
반응형
그리드형(광고전용)
'Database > Oracle' 카테고리의 다른 글
[DATABASE/ORACLE] PIVOT 함수 : 동적 집계하기 (0) | 2015.05.11 |
---|---|
[DATABASE/ORACLE] 특정 기간 날짜 테이블 조회하기 (0) | 2015.05.11 |
[DATABASE/ORACLE] OPEN FOR 명령 : 동적 쿼리 실행하기 (0) | 2015.05.10 |
[DATABASE/ORACLE] EXECUTE IMMEDIATE 명령 : 동적 쿼리 실행하기 (0) | 2015.05.10 |
[DATABASE/ORACLE] START WITH ~ CONNECT BY PRIOR 절 : 재귀 호출하기 (0) | 2015.05.10 |
[DATABASE/ORACLE] 페이지 단위 조회하기 (0) | 2015.05.09 |
[DATABASE/ORACLE] MERGE INTO문 사용하기 (0) | 2015.05.09 |
[DATABASE/ORACLE] 조인 업데이트 사용하기 (0) | 2015.05.09 |
[DATABASE/ORACLE] 컬럼 설명 설정하기 (0) | 2015.05.09 |
[DATABASE/ORACLE] 테이블 설명 설정하기 (0) | 2015.05.09 |
댓글을 달아 주세요