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);