오라클 MERGE INTO (MariaDB ON DUPLICATE KEY)

요즘 MariaDB 쿼리를 오라클 쿼리로 바꾸면서

배우는게 많은것 같다.

이번엔 MariaDB에서 ON DUPLICATE KEY 를 오라클에서

사용하기위해 바꿔 보겠다.


먼저 내가 바꾸려고 했던 MariaDB를 보자

대부분 ON DUPLICATE KEY 를 사용하기 위해선

아래와 구성이 비슷할 것이다.


ON DUPLICATE KEY 에 대한 구성과 기능을 알아보자.



INSERT INTO로 favorite 라는 테이블에

데이터를 삽입하려 한다.

hno, member_nm 이라는

컬럼에 VALUES로 파라미터값 #{hno}, #{memberNm}

의 값을 넣는다. 이때 hno와 member_nm에 이미 값이 들어있다면

ON DUPLICATE KEY 가 쓰이게 된다.


ON DUPLICATE KEY 를 사용하여 만약 INSERT하려는

테이블에 값들이 있으면 UPDATE 한다

hno의 값은 #{hno}

member_nm은 #{memberNm}

use_yn은 Y의 값으로 UPDATE한다.


이것이 위 쿼리문을 해석한 것이다.


ON DUPLICATE KEY 는 주로 INSERT INTO와 같이 쓰인다

데이터를 넣으려는데 이미 데이터가 있다면

ON DUPLICATE KEY 을 이용해 값을

INSERT 하지 않고 UPDATE 한다.


이제 위 쿼리문을 오라클로 바꿔보자


오라클에서도 ON DUPLICATE KEY 기능을 수행할수 있는

함수가 있다. 하지만 좀더 복잡하다.


그 함수는 MERGE INTO 라는 함수인데. 일단 내가 바꾼

쿼리문을 보자




MERGE INTO 로 favorite테이블에 접근한다.

USING 의 DUAL에서 USING은 사용하려는 테이블을 적어준다

DUAL은 사용할 테이블이 하나 라는 것이다.

즉 사용하려는 테이블이 하나이기 때문에 USING DUAL을 적어줬다.

ON 옆에는 비교 연산을 해야한다.

hno와 #{hno}가 같고 member_nm과 #{memberNm}을 비교하여

WHEN MATCHED THEN --> 두 비교 연산한 값이 같으면

UPDATE SET 해라, use_yn 을 Y값으로

WHEN NOT MATCHED THEN --> 비교 연산값이 다르면

INSERT 해라 hno 컬럼과 member_nm 컬럼에

#{hno}값과 #{memberNm}값을 INSERT.


이것이 위 쿼리를 해석한것이다.



나중에 테이블 2개를 사용한것도 한번 포스팅해봐야 겠다.



댓글

Designed by JB FACTORY