개발/Oracle

Oracle Merge into (다중 Update, Insert)

hhtj 2018. 9. 7. 10:32

MS SQL 에서는 UPDATE를 JOIN 으로 할 수 있는데, 오라클에서는 /*+ BYPASS_UJVC */ 힌트를 를 붙이거나 MERGE INTO 를 써야함

바이패스 힌트의 경우 11g 부터 문제가 발생하며, 오라클 공식으로는 MERGE INTO 를 쓰라고 나온 상태임


MERGE INTO는 9i 부터 지원된다고 함


--예제

MERGE INTO UPDATED_TABLE A

USING DATA_TABLE B

ON (

A.KEY = B.KEY

)

WHEN MATCHED THEN /* 매치되면? */

UPDATE SET

A.DATA1 = B.DATA1

WHEN NOT MATCHED THEN /* 매치안되면? */

INSERT (KEY, DATA1)

VALUES (B.KEY, B.DATA1)



매치 부분은 필요한 것 만 쓰면 됨

USING 쪽은 SUB QUERY 도 가능


--예제

MERGE INTO UPDATED_TABLE A

USING (

SELECT *

FROM DATA_TABLE B

) B

ON (

A.KEY = B.KEY

)

WHEN MATCHED THEN /* 매치되면? */

UPDATE SET

A.DATA1 = B.DATA1

WHEN NOT MATCHED THEN /* 매치안되면? */

INSERT (KEY, DATA1)

VALUES (B.KEY, B.DATA1)



※ ON 쪽에 괄호 () 는 필수 임