본문 바로가기

개발/오라클

오라클 - CONNECT BY LEVEL

이전 시간에 CONNECT BY PRIOR 에 대해서 공부를 했는데 내친 김에 이어서 CONNECT BY LEVEL 에 대해서도 공부를 해보자.


CONNECT BY LEVEL 은 결론부터 말하자면 FOR 문을 사용한 것처럼 결과 값을 보여주는 게 가능하다.

이것도 무슨 말인가 하면 설명하면 힘드니 곧바로 쿼리를 돌려서 알아보자.

SELECT	LEVEL
FROM	DUAL
CONNECT BY LEVEL <= 10
;
-------------------------------------
1
2
3
4
5
6
7
8
9
10

위의 예제를 보면 알 수 있듯이 CONNECT BY LEVEL <= :변수 로 지정한 만큼 ROW 를 반환해준다.

당연한 이야기지만 CONNECT BY LEVEL < 10 이었다면 9개의 ROW 만 표시가 되었을 것이다.


응용 가능한 예제를 몇 가지 예로 들고 끝내자.

-- 증가하는 날짜값
SELECT	TO_CHAR(TO_DATE('20180401','YYYYMMDD')+LEVEL-1,'YYYYMMDD') DAY
FROM DUAL
CONNECT BY LEVEL <= 10
;
-----------------------------------------------------------------------------
20180401
20180402
20180403
20180404
20180405
20180406
20180407
20180408
20180409
20180410

-- 이번달 1일부터 말일까지 구하기
SELECT	TO_CHAR(SYSDATE, 'YYYYMM') || LPAD(LEVEL, 2, '0')  AS TDAY
FROM	DUAL
CONNECT BY LEVEL <= ((TO_CHAR(LAST_DAY(SYSDATE), 'YYYYMMDD') - (TO_CHAR(SYSDATE, 'YYYYMM')||'01'))) + 1
;
-----------------------------------------------------------------------------
20180401
20180402
20180403
20180404
20180405
20180406
20180407
20180408
20180409
20180410
20180411
20180412
20180413
20180414
20180415
20180416
20180417
20180418
20180419
20180420
20180421
20180422
20180423
20180424
20180425
20180426
20180427
20180428
20180429
20180430