DB/Oracle

[Oracle] MERGE문으로 INSERT, UPDATE문 실행하기

콩다영 2020. 8. 18.
728x90

ORACLE - MERGE문으로 조건에 따라 INSERT문, UPDATE문 실행하기.

 

 

 

 

 

 

개발을 하다보면 상황에 따라

테이블에 데이터가 이미 존재하면 업데이트 하고, 존재하지 않으면 입력을 해야 하는 경우가 있다.

 

 

이때 유용하게 사용되는 것이  MERGE문 !! 사용방법을 익혀서 유연한 코드작성을 하자 !!!


MERGE문 사용방법 _

헷갈릴때마다 이 틀을 보고 헷갈리지 말자 !

: 다른 테이블에서 가져와서 데이터를 비교하는 것이 아니고 하나의 테이블만 사용할 때는 DUAL을 사용한다.

  CONDITION 에 조건을 넣어줌.

  조건이 일치하면 UPDATE문 실행, 일치하지 않으면 INSERT문 실행.

 

 

 

 

 

 

 

 

 

 

MERGE문 직접 사용 예시 !

보고만 따라해도 오류는 발생한다.. ㅠㅠ 오류를 정리해두고 다음에는 오류없이 바로 사용할 수 있기를 ... :b

MERGE INTO WEATHER_TEST
	USING DUAL
		ON ((FCST_DTM = #{fcstDate} || #{fcstTime}) AND CATEGORY = #{category} )
	WHEN MATCHED THEN
		UPDATE
		<set>
			FCST_VALUE = #{fcstValue}
		</set>
	WHEN NOT MATCHED THEN
		INSERT
		<trim prefix="(" suffix=")" suffixOverrides=",">
					BASE_DTM
				  , FCST_DTM 
				  , CATEGORY 
				  , FCST_VALUE
		</trim>
			VALUES
		<trim prefix="(" suffix=")" suffixOverrides=",">
					#{baseDate} || #{baseTime}
				  , #{fcstDate} || #{fcstTime}
				  , #{category}
				  , #{fcstValue}
		</trim>

 

 

 

 

 

<   내가 발생시켰던 , 주의해야 할  오류들  !!! >

:  ON 뒤에 조건에는 기본키(Primary Key)를 사용해야 한다. 안 그러면 중복 오류 발생 !!!

:  UPDATE문에는 변경할 값만 넣어줘야 된다 !! 조건까지 같이 다 넣어주면 값이 겹쳐서 오류 발생 !!!

 

 

 

   -> 여기서 다시 PRIMARY KEY를 확실히 다잡고 가보자 !

 

       PRIMARY KEY가 설정된 컬럼은 NULL을 허용하지 않으며, 중복된 값도 허용하지 않는다.

 

 

728x90
반응형

댓글