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)


Posted by 준콩ol 준콩ol

댓글을 달아 주세요