[ MERGE 문 ]

☞ 정의

 

테이블에 대해 조건적으로 갱신이나 삽입을 할 수 있도록 하는 "upsert" 기능을 제공한다.
 만일 그 행이 테이블에 이미 존재한다면 갱신을 수행하고, 그렇지 않으면 새로 행을 삽입한다.
 데이터 웨어하우징 애플리케이션의 ETL 과정에 유용하다.

☞ 이점

 

 MERGE 문을 사용함으로써 하나의 SQL 문으로 하여금 갱신이나 삽입, 또는 둘 다를 수행할 수 있다.
 MERGE 문은 사용자에게 투명한 방식으로 병렬 수행된다.
 원천 테이블에 대한 스캔이 덜 일어나므로 성능의 향상이 있다.

 

   

☞ 문법

 

MERGE INTO table_name alias
          
USING (table|view|subquery) alias
          
ON    (join condition)
          
WHEN MATCHED THEN
                       
UPDATE SET col1 = val1[, col2 = val2…]
          
WHEN NOT MATCHED THEN
                       
INSERT (컬럼리스트) VALUES
 (값들....);
- INTO clause : data가 update 되거나 insert될 table 이름  
- USING clause : 대상 table의 data와 비교한 후  update 또는 insert할 때 사용할 data의 source.
- ON clause : update나 insert를 하게 될 condition으로, 해당 condition을 만족하는 row가 있으면
    WHEN MATCHED 이하를 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다
    WHEN MATCHED : ON clause의 조건이 TRUE인 row에 수행할 내용
    WHEN NOT MATCHED : ON clause의 조건에 맞는 row가 없을 때 수행할 내용

 

☞ 예제

 

예1)       MERGE INTO customer C
           USING cust_src s
           ON    (c.customer_id = s.src_customer_id)
           WHEN MATCHED THEN
                      UPDATE SET c.cust_address = s.cust_address
           WHEN NOT MATCHED THEN
                     INSERT (customer_id, cust_first_name, ...)
             
        VALUES (src_customer_id, src_first_name, …);

 

           MERGE INTO Temp1 a
           USING ( select first from Temp2) t
           ON    (a.first = t.first)            
           WHEN MATCHED THEN
                     UPDATE SET    second = 'second',
                                   third  = 'third',
           WHEN NOT MATCHED THEN
                      INSERT (first,second,third)
                     
VALUES ('first','second','third') ;

 

 

'(DB) Oracle > SQL' 카테고리의 다른 글

Oracle - 예제_SELECT_GROUP  (0) 2017.01.18
Oracle - 예제_SELECT  (0) 2017.01.18
Oracle - 예제_INSERT  (0) 2017.01.18
Oracle - 예제_DELETE  (0) 2017.01.18
Oracle - ROWNUM 개념  (0) 2017.01.18
Posted by 농부지기
,