CONNECT BY LEVEL 로 데이터 추출하기

10G 이전 버전에서는 뷰나 테이블로
10G 이후 버전 DUAL 테이블과 CONNECT BY LEVEL 사용하여
추가적인 I/O 없이 임의 데이터 생성.

임의의 숫자 만들기
{code:sql}
1 ~ 10 가지 추출하는 SQL

-- 테스트 시작
SQL> select * from v$version;

BANNER



















-

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> SELECT LEVEL AS NUM_ROW
2 FROM DUAL
3 CONNECT BY LEVEL < 11;

NUM_ROW



--
1
2
3
4
5
6
7
8
9
10

|
||임의의 날짜 만들기||
|{code:sql}
CONNECT BY LEVEL 이 없었다면, 날짜가 저장된 별도의 테이블을  및 
딕션어리 뷰 등을 사용하여 조회함
따라서 발생되는 I/O가 발생함
아래와 같은 방법으로  날짜 관련 추출된 SQL 생성시
추가적인I/O는 발생하지않는다.

SQL> SELECT TO_CHAR(TO_DATE('20111201','YYYYMMDD') +LEVEL-1,'YYYYYMMDD') AS "DATE"
  2   FROM DUAL
  3  CONNECT BY LEVEL <= LAST_DAY(TO_DATE('20111201','YYYYMMDD'))
  4                              -TO_DATE('20111201','YYYYMMDD')+1;

DATE
---------
201111201
201111202
201111203
201111204
201111205
201111206
201111207
201111208
201111209
201111210
201111211

DATE
---------
201111212
201111213
201111214
201111215
201111216
201111217
201111218
201111219
201111220
201111221
201111222

DATE
---------
201111223
201111224
201111225
201111226
201111227
201111228
201111229
201111230
201111231


|