Programming/Oracle

oracle merge문

초록깨비 2022. 1. 10. 13:27
728x90

1. MERGE : 데이터의 존재 여부에 따라 데이터를 INSERT 하거나 UPDATE 할때 유용하게 사용

 

1) 한 문장으로 INSERT와 UPDATE를 동시에 처리

 

2) 한 건의 데이터는 INSERT와 UPDATE 중 하나만 수행

 

3) 대상이 이미 존재하면 UPDATE, 존재하지 않으면 INSERT

 

 

 

MERGE INTO EMP T1        //  UPDATE 되거나 INSERT 될 테이블

  USING (  SELECT ...

                 FROM DEPT   // MERGE 대상의 처리 방법을 결정 할 비교 데이터 집합

               WHERE ...

             ) T2

WHEN MATCHED THEN UPDATE SET T1.EMP_NM = T2.EMP_NM   // 비교 대상 데이터가 MERGE 대상에 이미 있음

                                                ,T1.EMP_CD = T2.EMP_CD

WHEN NOT MATCHED THEN INSERT(T1.EMP_CD, T1.EMP_NM)      // 비교 대상 데이터가 MERGE 대상에 없음

                                       VALUES(T2.EMP_CD, T2.EMP_NM); 

 

 

 

 

 

2. MY-SQL 에서는 오라클 MERGE문과 유사한 INSERT ~ ON DUPLICATE KEY 사용

단) MERGE와는 처리 방법이 다름에 유의

     먼저 INSERT를 시도하고, INSERT 중에 키 중복 에러가 나면 UPDATE를 처리 

     (키 중복은 PK, UK도 포함되므로 PK외에 UK가 있으면 의도와 다른 데이터 처리가 될 수 있으므로 유의 해야함) 

 

 

 

 

728x90