아래와 같은 테이블에 대하여 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
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;
|
실행 결과 입니다.
'Database & Data > ORACLE' 카테고리의 다른 글
Oracle 문자열을 파싱하여 테이블 구조로 변환 (0) | 2018.07.13 |
---|---|
Oracle-xml 문자열을 테이블에 저장하기 입니다. (2) | 2016.09.25 |