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