반응형
oracle connect by level 함수
CONNECT BY 절의 역할
- CONNECT BY 절은 계층 구조를 정의하는 데 사용되며, 주로 다음과 같은 상황에서 활용됩니다.
트리 구조 데이터 조회: 조직도, 파일 시스템 등 부모-자식 관계의 데이터를 탐색할 때 사용됩니다. - 반복적인 행 생성: 조건에 맞는 행을 인위적으로 여러 번 반복하여 생성할 때 사용됩니다. 이 경우가 바로 CONNECT BY LEVEL의 용도입니다.
예시
SELECT LEVEL, LPAD(TO_CHAR(LEVEL), 2, '0') AS formatted_number
FROM DUAL
CONNECT BY LEVEL <= 15;
LEVEL과 <= 15의 의미
- LEVEL: 오라클의 의사(Pseudo) 컬럼으로, 현재 행의 계층 레벨을 나타냅니다. 루트 노드(가장 상위 레벨)의 LEVEL은 1부터 시작하여 계층이 깊어질수록 1씩 증가합니다.
- <= 15: 반복을 멈추는 종료 조건입니다. LEVEL 값이 15 이하일 때까지 쿼리를 반복하라는 의미입니다.
따라서 CONNECT BY LEVEL <= 15는 "레벨이 15가 될 때까지 행을 반복해서 생성하라"는 뜻이 됩니다.
예시 분석
- 시작: DUAL 테이블에서 첫 번째 행을 시작점으로 삼습니다. 이때 LEVEL은 1입니다.
- 반복: CONNECT BY 절의 조건(LEVEL <= 15)을 확인합니다.
- LEVEL이 1일 때, 조건이 참이므로 다음 행을 생성하고 LEVEL을 2로 만듭니다.
- LEVEL이 2일 때, 조건이 참이므로 다음 행을 생성하고 LEVEL을 3으로 만듭니다.
- 이 과정을 LEVEL이 15가 될 때까지 반복합니다.
- 종료: LEVEL이 16이 되면 조건(16 <= 15)이 거짓이 되므로 반복을 멈춥니다.
결과적으로 이 쿼리는 1부터 15까지의 숫자를 가진 15개의 행을 생성하게 됩니다. LEVEL 컬럼을 사용해 번호를 매기거나 연속된 값을 만들 때 유용하게 쓰입니다.
요약하자면, CONNECT BY LEVEL <= 15는 특정 횟수(15회)만큼 행을 생성하는 반복문과 같은 역할을 하는 오라클의 특수한 구문입니다.
반응형
'db > oracle' 카테고리의 다른 글
| oracle 소수점 이하 버림 (0) | 2025.09.13 |
|---|---|
| 오라클 숫자 앞에 0 추가, LPAD (0) | 2025.09.13 |
| union all union 차이점 (0) | 2025.09.13 |
| oracle ORA-32044 (0) | 2025.09.13 |
| oracle 10초 마다 저장 하기[통계] (0) | 2025.09.13 |