◇ FORMAT
─────────────────────────────────────────────
MERGE INTO dest_table_name [alias]
USING (source_table_name or view or subquery) [alias]
ON (join condition)
WHEN MATCHED THEN
UPDATE SET col1 = value1[, col2 = value2…]
WHEN NOT MATCHED THEN
INSERT [(col1, col2, ... coln)] VALUES(value1, value2 ... valuen)
desc_table_name ....... UPSERT¹ 하고자 하는 테이블명
alias ......................... 조인조건, UPDATE, INSERT등레 사용될 Alias명
source_table_name .... UPSERT할 값이 들어있는 테이블명
view ......................... UPSERT할 값이 들어있는 뷰테이블명
subquery .................. UPSERT할 값을 SELECT 한 쿼리문장
join condition ............ UPSERT하기위한 조건 (WHERE절에 해당한다)
지정한 join condition에 의하여 그 값이 일치하면 UPDATE를 일치하지 않으면 INSERT를 수행한다.
※ ON 절에 기술된 컬럼이 WHEN MATCHED THEN 다음에 오는 UPDATE 문장에는 올수없다
즉, KEY에 해당하는 부분일 수 있으므로 조건에 해당된 컬럼이 UPDATE되는 것을 방지한다.
─────────────────────────────────────────────
다른 예시--------------------------
MERGE INTO TABLE1 A
USING
(
SELECT
:SEQ_NO AS seq_no, :KOR_NAME AS kor_name, :JOB AS job, :STATUS AS status
FROM dual
) B
ON
(
A.SEQ_NO = B.SEQ_NO
)
WHEN MATCHED THEN
UPDATE SET A.JOB = B.JOB
WHEN NOT MATCHED THEN
INSERT VALUES (B.SEQ_NO, B.KOR_NAME, B.JOB, B.STATUS)