본문 바로가기
TechNical/Oracle

MERGE INTO 를 사용해 봅시다.

by 강멍멍이 2010. 9. 17.
반응형
테이블을 조회해서 해당 조건으로 데이터가 존재하면 업데이트 하고
없으면 쑤셔 넣는다는 똑똑한 녀석이다.
실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자.
잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다.
ON 부분에는 다중 조건을 쓸 수 있다.
UPDATE나 INSERT를 할때 USING 문에서 뽑아온 값으로 넣을 수도 있다.

MERGE INTO seq_table f
USING (
         select col1, col2, col3, col4, col5
         , (select max(sqno) + 1
              from seq_table x
             where t.col1 = x.col1
               and t.col2 = x.col2
           ) as seqno
    from base_table t
       , seq_table c      
   where t.col1      = c.col1(+)
     and t.col2      = c.col2(+)
     and t.col3      = c.col3(+)    
      ) chk
   ON (
           f.col1      = chk.col1
       AND f.col2      = chk.col2
       AND f.col2      = chk.col2
      )
 WHEN MATCHED THEN
                   UPDATE
                      SET col4  = chk.col4
                        , col5  = 'test'                       
 WHEN NOT MATCHED THEN
                       INSERT (
                                col1, col2, col3, col4, col5
                               ) VALUES ( 'zz', 'aa', 'bbb', chk.col, chk.seqno )
반응형

댓글