MERGE INTO 사용할 테이블

USING 비교할 테이블(타 테이블과 비교하지 않을 시에는 DUAL 사용)

ON (비교조건)

WHEN MATCHED THEN(조건에 맞을 시)

UPDATE SET 값 WHERE 조건

DELETE WHERE 조건(작성하지 않아도 됨)

WHEN NOT MATCHED THEN(조건에 맞지 않을 시)

INSERT (컬럼들) VALUES (값들)

예제

CREATE TABLE TB1 ( NAME VARCHAR2(20), AGE NUMBER(3) ); -- 테이블 TB1 생성

INSERT INTO TB1(NAME, AGE) VALUES('홍길동', 35);
INSERT INTO TB1(NAME, AGE) VALUES('박혁거세', 40);
INSERT INTO TB1(NAME, AGE) VALUES('이순신', 40); -- TB1에 값 삽입

MERGE INTO TB1 A       -- 사용할 테이블
USING DUAL             -- 비교할 테이블(테이블 하나만 사용할 경우 DUAL 사용)
ON (A.NAME = '홍길동') -- 비교 조건(조건에 사용한 컬럼은 UPDATE 불가능)
	WHEN MATCHED THEN  -- 조건에 맞을 시
		UPDATE SET A.AGE = 50 WHERE A.NAME = '홍길동' -- TB1의 해당하는 줄의 AGE를 50으로 변경
		DELETE WHERE A.NAME = '홍길동' -- UPDATE 후 DELETE 문(생략 가능)
	WHEN NOT MATCHED THEN -- 조건에 맞지 않을 시
		INSERT (NAME, AGE) VALUES('홍길동', 30); -- INSERT문 수행

EX

<insert id="mergeEifAfcrOrigin" parameterType="kr.co.overpass.service.eif.model.EifAfcrOrigin">
MERGE INTO EIF_AFCR_ORIGIN A
USING (SELECT #{afcrOriginCd} AS afcr_origin_cd , #{afcrNo} AS afcr_no FROM DUAL) B
ON (A.afcr_origin_cd = B.afcr_origin_cd
AND A.afcr_no = B.afcr_no)
WHEN MATCHED THEN
UPDATE SET afcr_origin_nm = #{afcrOriginNm:VARCHAR}, upt_dtime = SYSDATE, upt_id = #{uptId:VARCHAR}
WHEN NOT MATCHED THEN
INSERT (afcr_no, afcr_origin_cd, afcr_origin_nm, reg_dtime, reg_id, upt_dtime, upt_id)
VALUES(#{afcrNo:VARCHAR},#{afcrOriginCd:VARCHAR},#{afcrOriginNm:VARCHAR},sysdate,#{regId:VARCHAR},sysdate,#{uptId:VARCHAR})
</insert>

'DB' 카테고리의 다른 글

오라클 EXISTS  (0) 2022.10.24
테이블 컬럼 카멜 표기법 변환기  (0) 2022.10.24
Mybatis 동적쿼리 <trim> 개념 및 문법 총 정리  (0) 2022.10.24
PL/SQL에 Excel Import  (0) 2022.10.24
ResultHandler  (0) 2022.10.24

+ Recent posts