DB/오라클
[Oracle] MERGE
lavender1122
2024. 10. 16. 22:25
- 보통 데이터를 처리할떄 데이터의 존재 여부를 확인(SELECT) 하고 해당 값이 없으면 삽입(INSERT) 하고 있으면 업데이트(UPDATE)를 하게 된다.
MERGE INTO [TABLE / VIEW] -- UPDATE 또는 INSERT 할 테이블 혹은 뷰
USING[TABLE / VIEW / DUAL] -- 비교할 대상 테이블 혹은 뷰(위 테이블과 동일할 경우 DUAL을 사용)
ON [조건] -- UPDATE 와 INSERT 처리할 조건문(조건이 일치하면 UPDATE / 불일치 시 INSERT)
WHEN MATCHED THEN -- 일치하는 경우
UPDATE SET
[COLUMN1] = [VALUE1],
[COLUMN2] = [VALUE2],
...
(DELETE [TABLE] WHERE [COLUMN 1] = [VALUE 1] AND ...) -- UPDATE 뿐만 아니라 DELETE 구문도 가능
WHEN NOT MATCHED THEN -- 일치하지 않는 경우
INSERT(COLUMN1,COLUMN2, ...)
VALUES (VALUE1, VALUE2, ...)
- MERGE INTO : INSERT 또는 UPDATE 할 테이브로가 테이블의 ALIAS 지정합니다.
- USING : 원하는 결과를 추출하기 위한 SELECT 문을 작성합니다.
- 이 SELECT 분에서 나온 결과를 INSERT 또는 UPDATE 할 예정입니다.
- ON : SELECT 한 결과와 입력하고 싶은 테이블의 UNIQUE한 값을 매칭하는 연결고리입니다.(주로 KEY 값을 사용)
- WHEN MATCHED THEN : SELECT의 결과가 INSERT할 테이블에 값이 이미 존재하는 경우 UPDATE를 실행합니다.
- WHEN NOT MATCHED THEN : SELECT의 결과가 INSERT할 테이블에 값이 없는 경우 INSERT를 실행합니다.
주의
- ON 조건절에 사용할 컬럼을 업데이트하면 오류가 발생합니다.
- SQL 오류: ORA-38104: ON 절에서 참조되는 열은 업데이트할 수 없음: "A"."JOB"
38104. 00000 - "Columns referenced in the ON Clause cannot be updated: %s"
출처
https://dreamcoding.tistory.com/94