Database/ORACLE
오라클(ORACLE) MERGE INTO (UPSERT)
준콩이
2013. 12. 12. 14:04
반응형
ORACLE MERGE INTO(UPSERT) 예제입니다.
오라클 머지 인투(ORACLE MERGE INTO) 구문은 아래의 If 조건문과 비슷합니다.
조건1이 성립하면 update 그렇지 않으면 insert를 수행하는 구문입니다.
오라클 9i 버전 이상에서 사용이 가능합니다.
/* PL/SQL에서 사용하는 일반적인 IF문 */ IF 조건1 = TRUE THEN UPDATE 쿼리 ELSE INSERT 쿼리 END IF;
상황에 따라 IF문을 사용한 구문과 MERGE를 사용한 구문의 성능 차이가 발생하여
필요 시 MERGE 구문을 적절히 사용하시면 됩니다.
아래는 MERGE 구분의 형식입니다.
/* MERGE INTO 구문 형식 */ MERGE INTO TABLE_NAME TBL1 USING TARGET_TABLE TABL2 -- 동일한 테이블일 경우 TARGET_TABLE을 DUAL로 지정 ON TBL1.COLUMN_NAME = TABL2.COLUMN_NAME -- 두 테이블을 JOIN하는 조건문 WHEN MATCHED THEN --조건에 맞을 경우 UPDATE SET COL1 = VAL1 ,COL2 = VAL2 ,COL3 = VAL3 WHEN NOT MATCHED THEN --조건에 맞지 않을 경우 INSERT(COL1, COL2, COL3) VALUES(VAL1, VAL2, VAL3)
위의 형식에 맞추어 오라클 머지(MERGE) 구문을 구현할 수 있습니다.
아래는 MERGE INTO를 사용한 예제문입니다.
/* MERGE INTO 사용 예문 */ MERGE INTO USER_MASTER UM -- Table USING ( SELECT UI.USER_ID, UI.USER_NAME, UI.NO, UG.GROUP_NAME FROM USER_MASTER_IMPORT UI LEFT JOIN USER_GROUP UG ON UI.USER_ID = UG.USER_ID ) UI -- Target table ON (UM.USER_ID = UI.USER_ID) -- 대상테이블(Target table)과의 JOIN 조건 -- 조건이 일치할 경우 WHEN MATCHED THEN UPDATE SET USER_NAME = USER_MASTER_IMPORT.USER_NAME -- 일치하지 않을 경우(10G에서 사용이 안될 경우도 있습니다.) WHEN NOT MATCHED THEN INSERT (USER_ID, USER_NAME, NO, GROUP_NAME) --INSERT 시 INTO를 사용하지 않음에 주의 VALUES (UI.USER_ID, UI.USER_NAME, UI.NO, UI.GROUP_NAME)
반응형