728x90
MERGE INTO TARGET_TABLE --update 또는 insert할 table
USING SOURCE_DATA --활용할 data로 table 또는 subquery로 정의할 수 있음
--SOURCE_DATA를 주체로 TARGET_TABLE를 inner join한다고 생각하면 됨
ON ( TARGET_TABLE.COL1 = SOURCE_DATA.COL1
AND TARGET_TABLE.COL2 = SOURCE_DATA.COL2)
--inner join이 된 경우 UPDATE
WHEN MATCEHED THEN
UPDATE SET
TARGET_TABLE.COL3 = SOURCE_DATA.COL3
, TARGET_TABLE.COL4 = SOURCE_DATA.COL4
[WHERE ..]
[DELETE WHERE ..]
--inner join이 안 된 경우 INSERT
WHEN NOT MATCHED THEN
INSERT (
COL1
, COL2
, COL3
, COL4)
VALUES (
SOURCE_DATA.COL1
, SOURCE_DATA.COL2
, SOURCE_DATA.COL3
, SOURCE_DATA.COL4)
;
SOURCE_DATA와 TARGET_TABLE의 inner join 여부에 따라 update또는 insert된다고 생각하면 편함.
WHEN MATCHED THEN에 WHERE절을 추가할 수 있고, 또 DELETE WHERE절을 추가할 수 있음.
UPDATE후에 조건에 안 맞으면 DELETE하는 식으로 지울 때 사용.
WHEN NOT MATCHED THEN은 SOURCE_DATA로 insert한다고 생각하면 편함.
--P_COL1, P_COL2, P_COL3, P_COL4는 파라미터
MERGE INTO TARGET_TABLE --update 또는 insert할 table
USING DUAL --활용할 data로 table 또는 subquery로 정의할 수 있음
ON ( TARGET_TABLE.COL1 = P_COL1
AND TARGET_TABLE.COL2 = P_CO2)
--inner join이 된 경우 UPDATE
WHEN MATCEHED THEN
UPDATE SET
TARGET_TABLE.COL3 = P_COL3
, TARGET_TABLE.COL4 = P_COL4
--inner join이 안 된 경우 INSERT
WHEN NOT MATCHED THEN
INSERT (
COL1
, COL2
, COL3
, COL4)
VALUES (
P_COL1
, P_COL2
, P_COL3
, P_COL4)
;
DUAL을 활용하여 파라미터만을 활용한 예시, 많이 사용하는 예시
728x90
'Programming > Oracle' 카테고리의 다른 글
KILL SESSION (0) | 2023.01.06 |
---|---|
테이블 정보 조회 (0) | 2022.11.11 |
Cursor 사용 방법 3가지 (0) | 2022.10.14 |