아래와 같은 테이블에 대하여 USERID 가 존재할 경우에는 UPD_DATE 를 현재 날짜로 갱신하고

존재하지 않을 경우에는 INSERT 하는 쿼리를 Merge Into로 만들경우 아래와 같이 작성하게 되면

UPDATE 는 되는데 INSERT 는 되지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING (SELECT USERIDX, USERID, USERNAME FROM TBL_USER WHERE USERID='6') TB
ON (TA.USERIDX = TB.USERIDX)
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

아래와 같이 변경하시면

데이터가 있을 경우 Update, 없을 경우 Insert를 수행하게 됩니다.

- 중요한 부분은 위 TB 집합을 DUAL 로 변경하고 ON 절에 Where 조건을 기입하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING DUAL
ON (TA.USERID = '6')
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

 

실행 결과 입니다.

Merge Into 실행 결과

+ Recent posts