본문 바로가기

DataBase/Oracle

[Oracle Database] MERGE INTO구문 사용법

하나의 저장 프로서지(SP)에서 UPDATE와 INSERT를 같이 사용해야 할 경우가 때때로 있다.

 

이 상황중에서 하나의 대상 테이블에서 해당 값이 row가 존재한다면 값을 UPDATE하고

존재 하지 않는다면 INSERT를 진행해야 하는 경우에서 몇가지 방법이 있겠으나 편리한

방법이 존재하기에 적어 두려고 한다.

 

 기존에는 

 

SELECT NVL(MAX(컬럼), 0) INTO 변수 FROM 테이블 WHERE 조건;

 

IF 변수 <> 0 THEN

 UPDATE 테이블 SET 대상 컬럼 = 적용 값 WHERE 조건

ELSE

 INSERT INTO 테이블 (컬럼...) VALUES ( 적용 값...);

END IF;

 

와 같은 방식을 사용했는데... 역시나 더 좋은 방법이 존재했었다.

이 문법은 다음과 같다.

 

  MERGE INTO 테이블

  USING 대상 테이블/뷰

    ON (조건)

  WHEN MATCHED THEN

    UPDATE SET

      컬럼1 = 값1

      컬럼2 = 값2

  WHEN NOT MATCHED THEN

    INSERT ( 컬럼1, 컬럼2... )

    VALUES ( 값1, 값2...) ;

 

와 같은 식인데. 예를 들면.

 

  MERGE INTO TEST_TABLE

  USING DAUL -- 가상 테이블

    ON (column3 = 1 AND column4 = 2)

  WHEN MATCHED THEN

    UPDATE SET

      column1 = 1

      column2 = 2

  WHEN NOT MATCHED THEN

    INSERT ( column1, column2... )

    VALUES ( 1, 2...) ;

 

와 같이 되겠다. 중요한건... Insert 할때 기본 구문과 다른게 'INTO 테이블'이 들어가지 

않는 다는 것이다.