DataBase/Oracle

on duplicate key update(MySQL) Vs merge into(Oracle) 사용법

희랍인 조르바 2018. 8. 10. 16:48


위의 두 기능은 insert를 하려는데 이미 데이터가 있다면 update를 할 수 있는 function이다.


테이블 하나를 사용하는 것만 정리해둬야겠다.(아직까진 테이블 하나씩만 사용하고 있어서)


MySQL의 경우,


1
2
3
4
5
6
7
8
9
10
11
12
    INSERT INTO demo_table --테이블명
        (
         company_seq, --primary key
          company_name,
         company_emp_name
        )
        VALUES(
         9999,
         'tistory',
         '조르바'
        )ON DUPLICATE KEY UPDATE -- primary key가 중복일 경우, 해당 primary row에 update
         company_emp_name = '초콜릿'
cs


Oracle의 경우,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    MERGE INTO demo_table --테이블명
            USING dual --원래는 같이 사용할 테이블이지만, 테이블 하나만 사용하면 dual로 설정
            ON (company_seq = '9999'-- join할 primary key를 조건식으로 넣어준다. 원래는 조건식이 들어갈 자리.
 
    WHEN MATCHED THEN -- primary key가 중복될 경우 처리할 쿼리
        UPDATE SET company_emp_name = '초콜릿'
 
    WHEN NOT MATCHED THEN -- primary key가 중복되지 않을 경우 처리할 쿼리
        INSERT(
         company_seq, --primary key
          company_name,
         company_emp_name
        )
        VALUES(
         9999,
         'tistory',
         '조르바'
        )
cs

 

짠~ 위의 소스처럼 사용하면 된다.