쿼리를 작성하다가 보면 기준이 되는 TEMP 테이블을 생성해서 사용해야 할 경우 가 있다.
예를 들면 10번 뻥튀기 조인을 하게 한다거나 , 아니면 기준 날짜를 정해 놓고 해당 날짜의 어떤 데이터가 있는지 조회를 하고 싶다거나 등등 ....
그럴때 DB2에서는 WITH절을 이용하면 쉽게 사용을 할 수 있다.
다음 참조 예제들을 보면 쉽게 이해가 갈 것이다.
LOOP의 탈출 조건은 WITH절 안에 구현을 해 주어야 한다.
수행 SQL >
WITH LOOP ( time , value ) as
( SELECT timestamp('20130101000000' ,'yyyymmddhh24miss') time ,
1 value
FROM sysibm.sysdummy1
UNION ALL
SELECT loop.time + 1 minute ,
loop.value + 1
FROM loop
WHERE loop.value < 20 -- LOOP 탈출 조건
)
SELECT *
FROM loop ;
결과 >
TIME VALUE
-------------------------- -----------
2013-01-01-00.00.00.000000 1
2013-01-01-00.01.00.000000 2
2013-01-01-00.02.00.000000 3
2013-01-01-00.03.00.000000 4
2013-01-01-00.04.00.000000 5
2013-01-01-00.05.00.000000 6
2013-01-01-00.06.00.000000 7
2013-01-01-00.07.00.000000 8
2013-01-01-00.08.00.000000 9
2013-01-01-00.09.00.000000 10
2013-01-01-00.10.00.000000 11
2013-01-01-00.11.00.000000 12
2013-01-01-00.12.00.000000 13
2013-01-01-00.13.00.000000 14
2013-01-01-00.14.00.000000 15
2013-01-01-00.15.00.000000 16
2013-01-01-00.16.00.000000 17
2013-01-01-00.17.00.000000 18
2013-01-01-00.18.00.000000 19
2013-01-01-00.19.00.000000 20
20 레코드가 선택되었습니다.
수행 SQL >
WITH LOOP ( id ) as
( SELECT 1 id
FROM sysibm.sysdummy1
UNION ALL
SELECT loop.id + 1
FROM loop
WHERE loop.id < 20 -- LOOP 탈출 조건
)
SELECT *
FROM loop ;
결과 >
ID
-----------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
20 레코드가 선택되었습니다.