elevne's Study Note
MERGE (Oracle) 본문
MERGE 문을 사용하여, 단 하나의 쿼리문만으로 INSERT, UPDATE, DELETE 작업을 모두 수행할 수 있다. 예로, 테이블에 데이터가 이미 존재한다면 업데이트 쿼리를 실행하고, 없을 경우에는 값을 넣어주는 작업을 하나의 MERGE 문으로 실행할 수 있다. 형식은 아래와 같다.
MERGE INTO TABLE/VIEW
USING TABLE/VIEW/DUAL
ON CONDITION
WHEN MATCHED THEN UPDATE SET ~~
WHEN NOT MATCHED THEN INSERT (~~) VALUES (~~)
우선 가장 첫 번째 줄에 MERGE 문을 실행할 테이블/뷰를 지정한다. 그 다음, USING 뒤에는 비교할 대상 테이블/뷰 혹은 MERGE 문을 실행할 테이블과 비교할 테이블이 같다면 DUAL 을 적어준다. CONDITION 부분에는 조건을 적어주는 것인데, 해당 조건이 만족하면 MATCHED, 불만족하면 NOT MATCHED 부분이 실행되는 것이다. 아래는 하나의 실제 예시 쿼리이다.
MERGE INTO TARGET_TABLE TAR
USING (SELECT COUNT(*) CNT FROM A WHERE A.ID = #{id}) S
ON (S.CNT > 0 )
WHEN MATCHED THEN
UPDATE SET TAR.TEST1 = #{testVal1}
WHEN NOT MATCHED THEN
INSERT (TAR.TEST1)
VALUES (#{testVal2})
TARGET_TABLE (TAR) 테이블에 대해서 MERGE 문을 실행하는 쿼리이다. 만약 A TABLE (S) 의 CNT 값이 0 보다 크다면 TAR.TEST1 값을 testVal1 값으로 업데이트하고, 그렇지 않다면 TAR.TEST1 에 testVal2 값을 새로 넣어주는 쿼리인 것이다.
Reference:
https://mine-it-record.tistory.com/261
'DB > Oracle' 카테고리의 다른 글
ORACLE GROUP BY, RANK, ROW_NUMBER (0) | 2022.12.24 |
---|---|
SQL 몇 가지 정리해두기! (0) | 2022.10.12 |