[DATABASE] DML - MERGE 함수

@욕심쟁이

·

2020. 11. 18. 09:48

반응형

DML - MERGE 함수

- 테이블을 합치는 작업을 수행하는 문법

 

1. 문법

MERGE INTO table1	--데이터가 추가될 테이블
	USING table2	--추가할 데이터가 있는 테이블
	ON (병합 조건절)
	WHEN MATCHED THEN
		UPDATE SET 갱신내용
		|DELETE WHERE 조건
	WHEN NOT MATCHED THEN
		INSERT VALUES (컬럼);

2. 예제

#1
CREATE TABLE p_01
(order_num  VARCHAR2(8),
prod_num    NUMBER,
AMOUNT      NUMBER,
PRICE       NUMBER);
#2
CREATE TABLE p_02
(order_num  VARCHAR2(8),
prod_num    NUMBER,
AMOUNT      NUMBER,
PRICE       NUMBER);
#3
CREATE TABLE p_total
(order_num  VARCHAR2(8),
prod_num    NUMBER,
AMOUNT      NUMBER,
PRICE       NUMBER);

3.데이터 추가

INSERT INTO p_01 VALUES ('20111301', 100, 1, 500);
INSERT INTO p_01 VALUES ('20111302', 105, 1, 400);
INSERT INTO p_01 VALUES ('20111303', 103, 1, 300);

INSERT INTO p_02 VALUES ('20111311', 100, 1, 400);
INSERT INTO p_02 VALUES ('20111312', 102, 1, 600);
INSERT INTO p_02 VALUES ('20111313', 104, 1, 800);

4. 예제 : p_01 테이블의 내용을 p_total 테이블에 병합

MERGE INTO p_total pt
USING p_01 p01 ON ( pt.order_num = p01.order_num )
WHEN MATCHED THEN UPDATE
SET pt.prod_num = p01.prod_num
WHEN NOT MATCHED THEN
INSERT
VALUES
    ( p01.order_num, p01.prod_num, p01.amount, p01.price );

5. 예제 : p_02 테이블의 내용을 p_total 테이블에 병합

MERGE INTO p_total pt
USING p_02 p02 ON ( pt.prod_num = p02.prod_num )
WHEN MATCHED THEN UPDATE
SET pt.price = p02.price
WHEN NOT MATCHED THEN
INSERT
VALUES
    ( p02.order_num, p02.prod_num, p02.amount, p02.price );


SELECT *
FROM p_total;
반응형