Computer/Database

[SQL] MERGE문, INSERT와 UPDATE를 동시에 진행하기

SenJ 2021. 11. 10. 19:00

업무상 배치파일을 작성하다보면 마주치는 다양한 쿼리문들 중 정말 유용하다고 생각하는 MERGE문을 정리한다. MERGE문은 조건에 맞추어 UPDATE 및 INSERT로 분기하여 데이터를 처리하는 구문으로, 프로그램상 굳이 데이터유무를 체크하지 않고 데이터를 UPDATE/INSERT할 수 있다. 학창시절에 데이터베이스 설계/작성까진 접해봤지만 운영을 해본 경험은 없기에 업무를 하며 처음 접해본 DML 문법이었다.

 

MERGE INTO {OBJTBL} A
USING
(
    SELECT COL1_PK,
           COL2_PK,
           COL3,
           COL4,
           COL5,
    FROM {WKTBL}
    WHERE COL1_PK=:P1
      AND COL2_PK=:P2
) B
ON
(
    A1.COL1 = B.COL1_PK
    AND A1.COL2 = B.COL2_PK
)
WHEN MATCHED THEN 
UPDATE SET
    A.COL3=B.COL3,
    A.COL4=B.COL4,
    A.COL5=B.COL5
WHERE A1.COL1 = B.COL1_PK
  AND A1.COL2 = B.COL2_PK  
WHEN NOT MATCHED THEN
INSERT VALUES
(
    B.COL1_PK,
    B.COL2_PK,
    B.COL3,
    B.COL4,
    B.COL5
);
COMMIT;

 

{OBJTBL} : 목적테이블

USING ( ) : MERGE를 진행하고 싶은 데이터를 조회한다.

ON ( ) : 데이터 유무를 체크하기 위한 기준 컬럼을 잡는다 ( 일반적으로 목적테이블의 PK값이 들어가게 됨 )

WHEN MATCHED THEN UPDATE SET : 일치하는 경우 UPDATE ( DELETE 를 사용할수도 있음 )

WHEN NOT MATCHED THEN INSERT VALUES : 일치하지 않는 경우 INSERT

추가적으로

WHEN MATCHED AND 조건 THEN 으로 추가 조건을 사용할 수도 있다.