-
[ORACLE]MERGE INTO USINGDB 2022. 6. 5. 16:21
회사에서 요즘 회원 이벤트 구축 파트를 개발하고 있다.
업권별(EX.카드연결, 계좌연결 등등)로 이벤트를 참여 여부를 체크했는데, 안했을 때는 INSERT를 해서 이벤트 참여를 시키고 이미 참여했을 경우 UPDATE문으로 사용여부를 N으로 바꾸도록 했는데, 이 문제를 MERGE INTO를 사용하여 간단하게 개발하였다.
아래 코드는 회사 소스가 공유 불가능 하여 예시로 만들어 보았다.
SELECT 를 했을때 데이터가 없을 때 INSERT , 데이터가 있을 때 UPDATE 를 사용한다.
MERGE INTO[TABLE/VIEW] USING [TABLE/VIEW/DUAL] --비교할 테이블 OR 뷰 (MERGE INTO 절의 테이블OR뷰와 동일 할 경우 DUAL 사용) ON [조건] --UPDATE와 INSERT를 처리할 조건문(일치하면 UPDATE , 불일치 INSERT) WHEN MATCHED THEN --일치하는 경우(UPDATE|DELETE) UPDATE SET [COLUMN1] = [VALUE1] [COLUMN2] = [VALUE2] (DELETE [TABLE] WHERE [COLUMN1] = [VALUE1] AND ...) -- DELETE 구문도 사용가능(단,오라클 10g 이상부터) WHEN NOT MATCHED THEN --불일치하는 경우 INSERT INSERT(COLUMN1, COLUMN2,...) VALUES(VALUE1, VALUE2,...)예제1) 같은 테이블 비교 후 MERGE INTO (DUAL 사용)
MERGE INTO emp A USING DUAL ON (A.empNo = '1004') --EMP테이블에 회원번호에 1004가 있으면 WHEN MATCHED THEN --일치할 경우 UPDATE SET A.modiDate = SYSDATE -- 수정일 컬럼을 현재날짜로 UPDATE WHEN NOT MATCHED THEN INSERT(A.name, A.empno,A.regDate) VALUES(1234,'DOBBY',SYSDATE);2) 서로 다른 테이블 비교 후(서브쿼리) MERGE INTO
MERGE INTO emp A USING(SELECT AA.empNo --emp테이블과 dept 테이블에 empNO 1004번과 depNO가 서로 같은 조건 ,AA.job ,AA.deptNo FROM emp AA ,dept BB WHERE AA.empNo = '1004' AND AA.deptNo = BB.deptNo) B ON(A.empNo = B.empNo) WHEN MATCHED THEN --일치 시 emp 테이블에 dept 테이블에 있는 deptNo, job컬럼 데이터를 UPDATE 시킨다. UPDATE SET A.deptNo = B.deptNo ,A.job = B.job WHEN NOT MATCHED THEN --불일치 시 emp 테이블에 데이터를 INSERT INSERT(A.empNo, A.job, A.deptNo) VALUES(B.empNo, B.job, B.deptNo)'DB' 카테고리의 다른 글
[ORACLE]ROWNUM VS FETCH FIRST ROWS사용법 (0) 2022.06.04