본문 바로가기
Web Programming/DB

[ORACLE] MERGE 쿼리문(UPDATE문과 INSERT문 일괄 처리하기)

by jaey0ng 2023. 3. 28.

MERGE문은 조건이 있을때 수행하고, 없어도 수행하게 만드는 쿼리문입니다.

UPDATE와 INSERT를 한번에 쓰거나 필요로 할 때 사용합니다.

 

MERGE문 예제입니다.

MERGE INTO TABLE A
USING DUAL
   ON (A.컬럼 = 값1)
 WHEN MATCHED THEN
      UPDATE
         SET A.컬럼2 = 값2
           , A.컬럼3 = 값3
 WHEN NOT MATCHED THEN
      INSERT
           ( A.컬럼
           , A.컬럼2
           , A.컬럼3
           )
      VALUES
           ( 값1
           , 값2
           , 값3
           )
;

위처럼 사용하시면 됩니다.

 

부가설명을 드리자면

TABLE A에 위 조건에 맞는 데이터가 있으면 MATCHED가 성사되기에 UPDATE문이 적용되고,

                   위 조건에 맞는 데이터가 없으면 NOT MATCHED가 되어 INSERT문이 적용됩니다.

 

※주의사항※

1. ORA-00969: ON 키워드가 없습니다.

2. UPDATE문에 ON 조건을 변경할 수 없습니다.

 

1. 해결방안

MERGE INTO TABLE A
USING DUAL
   ON A.컬럼 = 값1
 WHEN ~

이렇게 작성한 쿼리를

MERGE INTO TABLE A
USING DUAL
   ON (A.컬럼 = 값1)
 WHEN ~

ON 오른쪽 조건부 문장들을 괄호로 묶으면 해결됩니다.

 

2. 해결방안

MERGE INTO TABLE A
USING DUAL
   ON (A.컬럼 = 값1)
 WHEN MATCHED THEN
      UPDATE
         SET A.컬럼  = 값1
           , A.컬럼2 = 값2
           , A.컬럼3 = 값3
~

로 작성을 했다면

MERGE INTO TABLE A
USING DUAL
   ON (A.컬럼 = 값1)
 WHEN MATCHED THEN
      UPDATE
         SET A.컬럼2 = 값2
           , A.컬럼3 = 값3
~

위 처럼 ON절 컬럼을 UPDATE문에서 제외시키면 됩니다.