참고
https://ahrang.tistory.com/14
문법
SELECT 컬럼명
, LEVEL /*[의사컬럼] 루프데이터 = 1 그 하위는 리프(leaf, 마지막레벨)데이터까지 1씩 증가*/
, CONNECT_BY_ROOT 컬럼명 /*[예약어] 루트 데이터*/
, CONNECT_BY_ISLEAF /*[예약어] 전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0 */
, SYS_CONNECT_BY_PATH(컬럼, 경로분리자) /*[예약어] 루트 데이터 ~ 현재 데이터까지 경로*/
FROM 테이블명
WHERE 조건식
START WITH 조건식 AND 조건식 /* 계층 구조의 데이터를 읽어나가는데 있어 시작점. 서브쿼리 가능 */
CONNECT BY PRIOR 컬렴명1 = 컬럼명2 AND 조건식 /* 다음에 읽을 자식 데이터를 지정, PRIOR가 붙은 컬럼명1의 값을 읽어 컬럼명2에 대입, 즉 PRIOR '1234' = 컬럼명2 요런식. 서브쿼리 불가*/
[ORDER SIBLINGS BY 컬럼명, ......]
CONNECT BY의 실행순서
- START WITH 절
- CONNECT BY 절
- WHERE 절- 단순 필터조건이고 처리범위를 줄이지는 못한다.
예시
ORDER_NO |
ORDER_DETAIL_NO |
JBF_ORDER_DETAIL_NO |
ORDER_CLASSIFICATION_CODE |
20190718A12345 |
784134856 |
0 |
10 |
20190718A12345 |
784712020 |
784134856 |
14 |
20190718A12345 |
784712019 |
784134856 |
16 |
20190718A12345 |
784774036 |
784712020 |
15 |
20190718A12345 |
784774035 |
784712019 |
17 |
20190718A12345 |
784939376 |
784134856 |
12 |
20190718A12345 |
785233821 |
784939376 |
13 |
20190718A12345 |
785241212 |
784134856 |
16 |
20190718A12345 |
785241213 |
784134856 |
14 |
20190718A12345 |
785512877 |
785241212 |
17 |
20190718A12345 |
785512878 |
785241213 |
15 |
쿼리
SELECT ORDER_NO, ORDER_DETAIL_NO, JBF_ORDER_DETAIL_NO, ORDER_CLASSIFICATION_CODE
, LEVEL
, CONNECT_BY_ROOT ORDER_DETAIL_NO AS ROOT
, CONNECT_BY_ISLEAF
, SYS_CONNECT_BY_PATH(ORDER_DETAIL_NO, '/')
FROM MY_ORDER_DETAIL
WHERE 1=1--CONNECT_BY_ISLEAF = 1 /*최하위 ROW = 1*/
START WITH ORDER_NO = '20190718A12345' AND ORDER_DETAIL_NO = 785512878 /* 반품할대상 */
CONNECT BY PRIOR JBF_ORDER_DETAIL_NO = ORDER_DETAIL_NO AND PRIOR ORDER_NO = ORDER_NO
;
-- JBF_ORDER_DETAIL_NO : 상위(어디에서부터 왔는가?)
-- ORDER_DETAIL_NO : 하위?
결과
ORDER_NO |
ORDER_DETAIL_NO |
JBF_ORDER_DETAIL_NO |
ORDER_CLASSIFICATION_CODE |
LEVEL |
ROOT |
CONNECT_BY_ISLEAF |
SYS_CONNECT_BY_PATH(ORDER_DETAIL_NO,'/') |
20190718A12345 |
785512878 |
785241213 |
15 |
1 |
785512878 |
0 |
/785512878 |
20190718A12345 |
785241213 |
784134856 |
14 |
2 |
785512878 |
0 |
/785512878/785241213 |
20190718A12345 |
784134856 |
|
10 |
3 |
785512878 |
1 |
/785512878/785241213/784134856 |