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 으로 추가 조건을 사용할 수도 있다.