반응형

쿼리를 작성하다가 보면 기준이 되는 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 레코드가 선택되었습니다.


반응형

+ Recent posts