DB

Merge Into 에서 insert가 안될때

미스테리아 2024. 1. 17. 10:01


MERGE문을 잘 사용해보지 않아서 서칭후에 쿼리를 돌렸는데
UPDATE는 잘 되는데  INSERT가 되지않았다.

그래서 다시 검색해보니 단일 테이블로 자기자신을 MERGE할경우 USING절에 DUAL을 사용해줘야한다.

예를들어보자

MERGE INTO TUSER T
USING
(
      SELECT USERID , USERNM FROM TUSER WHERE USERID=:V_USERID
)  V
ON  T.USERID=V.USERID
WHEN MATCHED THEN
     UPDATE SET USERNM ='KIM'
WHEN NOT MATCHED THEN
    INSERT
    (USERID, USERNM)
    VALUSE
    (''H,'HONG')


USERID가 일치할때 UPDATE, 일치하지 않을때 INSERT하는것으로 문제가 없어 보인다.
그렇지만 실행시 INSERT가 되지않는다.

단일테이블로 사용할경우 아래처럼 USING절에 DUAL을 사용해줘야한다.

MERGE INTO TUSER T
USING DUAL
ON  T.USERID=:V_USERID
WHEN MATCHED THEN
     UPDATE SET USERNM ='KIM'
WHEN NOT MATCHED THEN
    INSERT
    (USERID, USERNM)
    VALUSE
    (''H,'HONG')


더 간략하게  해결 완료!!

#merge #merge no  insert #merge zero upsert row