업무상 배치파일을 작성하다보면 마주치는 다양한 쿼리문들 중 정말 유용하다고 생각하는 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 으로 추가 조건을 사용할 수도 있다.
'Computer > Database' 카테고리의 다른 글
[EXCEL] 데이터를 연결해주는 VLOOKUP 함수 기초 (0) | 2021.12.01 |
---|---|
[SQL] RANK / DENSE_RANK /ROW_NUMBER (순위함수 그리고 최신데이터 출력 방법) (0) | 2021.11.22 |
[SQL] SUBSTR / INSTR / CONCAT / TRIM / LPAD&RPAD / REPLACE (한 눈에 보는 문자열 함수 모음집) (0) | 2021.11.20 |
[SQL] ROLLUP/GROUPING 깔끔한 소계/합계 보고서만들기 (0) | 2021.11.19 |
[SQL] 서브쿼리 (0) | 2021.11.18 |