DataBase/Oracle

MySQL의 INSERT IGNORE을 Oracle에서 구현하기

희랍인 조르바 2018. 8. 17. 15:31


중복키 관리를 위한 function으로 MySQL에서는 INSERT IGNORE이라는 내장함수를 제공한다.


INSERT IGNORE은 primary key가 중복될 경우, 데이터를 insert하지 않는다. 


0 row affected라는 로그만 반환할 뿐.


이 함수를 Oracle에서 적용해보려고 찾다가 StackOverFlow에서 좋은 해결법을 찾아서 공유한다.


MEGER INTO를 활용한 방법인데, 


아래처럼 만들어주면 된다. mybatis를 사용하고 있으므로 mybatis식으로 작성했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MERGE INTO '테이블 명' demo_table
     USING (SELECT #{PK 파라미터} AS pk_column,
                   #{인서트할 파라미터들} AS demo_table_columns(인서트할 사용 테이블의 컬럼들)
              FROM dual
            ) dummy
        ON (demo_table.pk_column = dummy.pk_column)
 
WHEN NOT MATCHED THEN
    INSERT(
            pk_column,
            demo_table_columns
            )
    VALUES(
            dummy.pk_column,
            dummy.demo_table_columns
            )
cs


위와 같이 사용하면 MySQL의 INSERT IGNORE처럼 중복키가 발생하면 INSERT를 하지 않는다.


PK가 동일할(중복될) 경우 WHEN MATCHED THEN 로직을 타겠지만, 작성된 쿼리가 없으니 아무 동작이 발생하지 않는다.


출처: 스택오버플로우 - click