계층구조의 수직적 통합으로 순환관계 모델이 만들어 질수 있다
오라클에서는 start with 구문을 제공하여 간단하게 순환전개 쿼리를 작성할 수 있다.
1) 순환전개 SQL
SELECT LEVEL, 부서코드, 부서명, 상위부서코드, PRIOR 부서코드
FROM 부서
START WITH 부서코드 ='001'
CONNECT BY 상위부서코드 = PRIOR 부서코드
부서코드 '001' 을 가진 RECORD 로 부터 시작해서 해당부서코드가 상위부서코드로 되어있는 하위 레코드들을 찾아가는 쿼리이다.
LEVEL, PRIOR 는 RECURSIVE SQL 에 제공되는 가상으로 만들어진 컬럼이다.
LEVEL 은 해당 레코드의 depth 를, prior 는 "앞서 읽은" 이라는 의미로 이것을 단서로 계층적으로 레코드들을 찾아나간다.
2) 순환전개 결과의 정렬
SELECT LEVEL, 부서코드, 부서명, 상위부서코드
FROM 부서
START WITH 부서코드 ='001'
CONNECT BY 상위부서코드 = PRIOR 부서코드
ORDER SIBLINGS BY 부서코드
정렬된 결과를 얻기 위해서는 ORDER BY 중간에 SIBLINGS 를 써줘야 한다.
같은 레벨에서의 정렬을 의미한다.
3) 실행순서
(1)START WITH 에서 시작해서
(2) CONNECT BY 로 순환전개를 풀고 나서야
(3) WHERE 조건에 맞는 ROW 만 취하고 나머지는 discard 한다.
* 인덱스 생성 : 위 쿼리에서는 prior 에서 찾는 값이 상수가되어 '상위부서코드'를 찾게 되므로
상위부서코드에 인덱스가 필요하다. but 역전개 쿼리 가능성도 존재하므로 '부서코드' 에도 인덱스를
만드는게 좋다.
'생계 > Oracle' 카테고리의 다른 글
오라클 DISKGROUP RENAME (0) | 2022.12.21 |
---|---|
ASM 사용중 datafile 을 다른 diskgroup 으로 이동 (0) | 2022.12.21 |
트리거 안쓰는 이유 (0) | 2022.08.30 |
dbms random (0) | 2022.08.24 |
[oracle] db접속 안될때 (0) | 2022.08.15 |