본문 바로가기

IT/Oracle

MERGE INTO 구문

MERGE INTO란?

 

 - MERGE문은 조건에 따라서 데이터의 삽입,갱신,삭제 작업을 한번에 할 수 있음.


 - 해당 행이 존재하는 경우 UPDATE(DELETE포함 할 수 있음)를 수행하고, 새로운 행일경우 INSERT를 수행

 

# 문법

 MERGE INTO 테이블              -- update또는 insert할 테이블
       USING 대상테이블/뷰       -- 비교대상 (동일 테이블이라면 using dual 사용)
           ON (조건)                   -- 테이블과 대상테이블의 조인식
        WHEN MATCHED THEN
                  UPDATE SET
                              컬럼1 = 값1
                              컬럼2 = 값2
                  DELETE WHERE (조건)
        WHEN NOT MATCHED THEN
                  INSERT(컬럼1, 컬럼2...)
                  VALUES(값1, 값2...)

 - INTO : DATA가 UPDATE되거나 INSERT 될 테이블 또는 뷰를 지정.
 - USING : 비교할 SOURCE 테이블 또는 뷰나 서브쿼리를 지정, INTO절의 테이블과 동일하거나 다를 수 있다.
 - ON : UPDATE나 INSERT를 하게 될 조건으로, 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절을 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
 - WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용 (UPDATE, DELETE포함 될 수 있음)
 - WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용 (INSERT)

 

# EXAMPLE


MERGE INTO SALES_MST SM
     USING (SELECT COMPANY_CODE, ITEM_CODE
              FROM SALES_MST_INF
             WHERE COMPANY_CODE = '1000' AND ITEM_CODE = '5845') S
            
        ON (SM.COMPANY_CODE = S.COMPANY_CODE AND SM.ITEM_CODE = S.ITEM_CODE)
       
WHEN MATCHED THEN
   UPDATE SET SM.APPLY_DATE = S.APPLY_DATE, SM.DEPARTMENT_CODE = S.DEPARTMENT_CODE
  
WHEN NOT MATCHED THEN
   INSERT  (SM.COMPANY_CODE, SM.ITEM_CODE, SM.EXPORTER_NAME, SM.CUSTOMER_NAME)
   VALUES (S.COMPANY_CODE, S.ITEM_CODE, S.EXPORTER_NAME, S.CUSTOMER_NAME);