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