DATABASE
[ORACLE] MERGE문
오래오래 늘 함께
2018. 11. 6. 09:55
- MERGE INTO 구문
- 조건에 따라서 데이터의 삽입, 갱신, 삭제 작업을 한번에 할 수 있다.
- 해당 행이 존재하는 경우 UPDATE / 새로운 행일경우 INSERT 수행한다.
- 대상 테이블에 대한 UPDATE/INSERT 조건은 ON절에 의해 결정된다.
- MERGE문에서 CLOB 사용시 업데이트할 내용이 2000bytes가 넘을때 ORA-00600오류가 발생하며,
patch set 11.2.0.2 버전으로 해결가능
- 문법
MERGE INTO 테이블 A --- UPDATE / INSERT할 테이블
USEING 대상테이블/뷰 B --- 비교대상 테이블 ( 동일 테이블이면 using dual 사용)
ON (조건) --- A 와 B의 조인식
WHEN MATCHED THEN --- ON 조건절에 맞는 ROW(행)이 있을때
UPDATE SET
컬럼 1 = 값 1
컬럼 2 = 값 2
DELETE WHERE (조건)
WHEN NOT MATCHED THEN --- ON조건절에 맞는 ROW(행)이 없을때
INSERT (
컬럼1,
컬럼2,
....
)
VALUES (
값1,
값2,
...
)
- 예시
MERGE INTO IV_PERSON A
USING (SELECT #apno# apno --- 해당 apno를 가지고 있는 테이블 B
FROM DUAL
) B
ON (
A.apno = B.apno --- 테이블 A의 apno와 테이블 B의 apno가 같은지
)
WHEN MATCHED THEN --- apno가 같으면 UPDATE (기존 행 업데이트)
UPDATE SET
a.partcd = (select partcd from iv_apman where apno = #apno#)
,a.chnnm = #chnnm#
,a.country = #country#
,a.address = #address#
...
WHEN NOT MATCHED THEN --- apno가 같지 않다면 INSERT (새로운 행 삽입)
INSERT
(
a.apno
,a.partcd
,a.chnnm
,a.country
,a.address
...
)
VALUES
(
#apno#
,(select partcd from iv_apman where apno = #apno#)
,#chnnm#
,#country#
,#address#
...
)