본문 바로가기
IT/Database

[Oracle] Merge Into 문법 (값이 있으면 update, 없으면 insert)

by 성준하이 2023. 10. 14.
반응형

제목에 써있는 그대로,

테이블에서 특정 조건으로 검색하여 값이 나오면 update를 하고 없다면 insert를 하게 되는 문법이다.

 

주로 초기 회원가입이나, 오랜만에 접속하는 휴먼 계정 등에서 사용이 될수 있고, 이밖에도 많은곳에서 사용되는 쿼리이다.

 

만약 프로그래밍 언어로 풀게 되려면 먼저 아래와 같다.

 

//조회 해보고

SELECT COUNT(1) AS CNT FROM TALBE WHERE ID = 'id' AND NAME='name';

 

if (cnt >=1){ //값이 있다면

     UPDATE TABLE SET NUM = NUM+1 WHERE ID = 'id' AND NAME = 'name';

} else{ //값이 없다면

     INSERT INTO TABLE (ID,NAME,NUM) VALUES ('id','name',1);

}

 

pseudo 코드로 작성하였지만 대충 흐름은 이해 될것이다.(pseudo 코드란? 참고 포스팅 참고)

 

 

위와 같이 코드를 짠다면 쿼리마다 db connection 을 맺어야하거나,

트랜잭션에서 고민이 될수도 있는데 이 코드를 아래 쿼리 하나로 해결 가능하다.

 

MERGE INTO TABLE
USING DUAL
ON ( ID = 'id' AND NAME = 'name')
       WHEN MATCHED THEN
          UPDATE SET
              NUM = NUM+1
       WHEN NOT MATCHED THEN
          INSERT (ID,NAME,NUM)
          VALUES('id', 'name', 1);

 


참고 포스팅

https://thenicesj.tistory.com/670

 

의사코드(pseudocode)란?

의사코드라고도 하고 영어를 읽으면 발음이 슈도 코드 라고 하는데 이 슈도 코드란. 말 그대로 의사대로 코드를 적은 것이다. 나무 위키 정의는 다음과 같다. 알고리즘을 표현하는 방법 중 하나

thenicesj.tistory.com

 

반응형

댓글