본문 바로가기
개발/오라클

오라클 - CONNECT BY LEVEL

by 루 프란체 2018. 4. 14.

이전 시간에 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


댓글