merge into는
DB 테이블을 다룰 때, 특정 조건의 데이터가 존재하는 경우에는 해당 row를 원하는 값으로 update하고,
없는 경우에는 새로운 데이터를 insert해야 하는 경우에 사용한다.
MERGE문
MERGE INTO 테이블명
USING ( update나 insert될 데이터 원천, 하나의 테이블만 이용한다면 FROM DUAL사용 )
ON (UPDATE될 조건, 쿼리의 WHERE이라고 봐도 무방함)
WHEN MATCHED THEN ( ON에서 조건에 해당하면 실행 될 문 )
UPDATE SET 컬럼1 = 값1 ( UPDATE문 실행)
WHEN NOT MATCHED THEN ( ON에서 조건에 해당하지 않으면 실행 될 문 )
INSERT ( 컬럼 LIST ) VALUE ( VALUE );
!!!!!! 가장 중요한것. 이거때문에 하루 버렸는데,Point!!!!
using ( select 할때 )에서 항시 해당 Table 의 PK를 전체를 변수로 받아야 합니다. null 유의 )
예) 회사에서 사용한 것 (테이블명,컬럼명 변경함)
MERGE INTO MAP_M A
USING ( SELECT :컬럼0 AS 컬럼0 //컬럼0~3은 모두 MAP_M 이라는 테이블의 KEY값.
, :컬럼1 AS 컬럼1
, :컬럼2 AS 컬럼2
, :컬럼3 AS 컬럼3
FROM DUAL ) B // FROM DUAL은 테이블을 1개만 쓸때!!
ON ( A.컬럼0 = B.컬럼0 AND
A.컬럼1 = B.컬럼1 AND
A.컬럼2 = B.컬럼2 AND
A.컬럼3 = B.컬럼3
)
WHEN MATCHED THEN
UPDATE
SET A.컬럼4 = 'Y'
, A.컬럼5 = :받아올 값
, A.컬럼6 = :받아올 값
WHEN NOT MATCHED THEN
INSERT ( 컬럼1, 컬럼2, 컬럼3, 컬럼4, 컬럼5, 컬럼6 )
VALUES (:컬럼1, :컬럼2, :컬럼3, :컬럼4, :컬럼5, :컬럼6 )
이런식으로 사용하면 끝 !!!!
그리고 Oracle 10g 이후에는 When matched,, when not matched 이하의 update,insert 구문에도 where을 사용할 수 있습니다 !!!!
'DBMS > Oracle' 카테고리의 다른 글
mybits 에러 (0) | 2018.07.13 |
---|---|
이런방식의 쿼리. sort_sql에서 max값 구할때 (0) | 2017.12.06 |
데이터 변형 (0) | 2017.10.17 |
LAPD,RAPD 사용법 (0) | 2017.10.17 |
UNION, UNION ALL (0) | 2017.06.16 |