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 |