Oracle MERGE INTO를 활용해 값이 있는지 확인후 insert , update , delete ,selete 하는 방법
이전에 포스팅 했던 MSSQL의 EXISTS 기능을 오라클에서 사용하는 방법이다
2016/08/12 - [Yame Programmer/SQL] - [MSSQL] 값이 존재하는지 확인 후 update insert [EXISTS] 활용
MSSQL을 사용했던 프로젝트를 Oracle로 마이그레이션 하게 되면서 다시 사용하게 되었다.
입사 초기에 Oracle를 사용하다 이후 쭉 MSSQL만 써서 기억이 가물가물 했다ㅋㅋ
1. 기본 포맷
1 2 3 4 5 6 | MERGE INTO 테이블명 USING ( 서브쿼리 ) ON ( 조건 ) WHEN MATCHED THEN 조건에 값이 있는 경우 실행할 쿼리 WHEN NOT MATCHED THEN 조건에 값이 없는 경우 실행할 쿼리 | cs |
2. 간단한 예제
1) 서브쿼리 없이 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 | MERGE INTO TABLENAME USING DUAL ON (PK_CD = 'PKCD001' AND DATA_NAME = 'dataName') WHEN MATCHED THEN UPDATE SET DATA_COL1 = '업데이트 내용 1', DATA_COL2 = '업데이트 내용 2', DATA_COL3 = '업데이트 내용 3', WHEN NOT MATCHED THEN INSERT (PK_CD, DATA_NAME, DATA_COL1, DATA_COL2, DATA_COL3) VALUES('PKCD001', 'dataName', '넣을 내용1', '넣을 내용3', '넣을 내용3') | cs |
2) 서브쿼리 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | MERGE INTO TABLE_NAME TARGETTB USING( SELECT CHECKTB.PK_CD ,CHECKTB.DATA_NAME FROM TABLE_NAME CHECKTB LEFT JOIN JOIN_TB JT ON JT.DATA = CHECKTB.DATA ) CHECK ON (TARGETTB.PK_CD = CHECK.PK_CD AND TARGETTB.DATA_NAME = CHECK.DATA_NAME) WHEN MATCHED THEN UPDATE SET DATA_COL1 = '업데이트 내용 1', DATA_COL2 = '업데이트 내용 2', DATA_COL3 = '업데이트 내용 3', WHEN NOT MATCHED THEN INSERT (PK_CD, DATA_NAME, DATA_COL1, DATA_COL2, DATA_COL3) VALUES('PKCD001', 'dataName', '넣을 내용1', '넣을 내용3', '넣을 내용3') | cs |
꼭 INSERT UPDATE만 넣을 수 있는게 아니라 SELECT DELETE를 넣어서 사용 할 수도 있다.
'Yame Programmer > SQL' 카테고리의 다른 글
[MyBatis] Oracle 부적합한 열유형 null 처리 방법 jdbcType=VARCHAR 안쓰기 (2) | 2017.01.11 |
---|---|
[MSSQL] MSSQL 날짜 포맷 변환표 (0) | 2017.01.09 |
[sql 튜닝] 이론 임시 내용[하드 파싱 소프트 파싱 캐시 블락] (0) | 2016.10.27 |
[sql튜닝] cmd 명령문 실행 계획 (0) | 2016.10.27 |
[Oracle] 값이 존재하는지 확인 후 insert, update 하기 (0) | 2016.10.05 |