MERGE INTO
개발을 하다 보면 수시로 INSERT와 UPDATE를 할 일이 발생합니다. 이때 오라클의 MERGE INTO 구문을 활용하면 조건에 해당되는 값이 있으면 UPDATE 없으면 INSERT를 한 구문으로 처리할 수 있습니다.
각각 중복 체크를 하고 INSERT나 UPDATE를 하는 것과 비교하면 상당히 유용한 구문이라고 할 수 있죠. 그럼 여러 예제를 통해 MERGE INTO를 사용하는 방법을 소개하겠습니다.
1. 테이블에서 조회하여 비교 후 저장
다음과 같은 테이블이 (TARGET_TABLE, DATA_TABLE) 있다고 가정하고 DATA_TABLE에서 조회하여 TARGET_TABLE에 입력하는 예시입니다. 데이터를 비교할 컬럼은 'COL_KEY', 입력할 컬럼은 'COL_VAL'로 하겠습니다.
1
2
3
4
5
6
7
8
9
|
MERGE INTO TARGET_TABLE A
USING DATA_TABLE B
ON( A.COL_KEY = B.COL_KEY )
WHEN MATCHED THEN
UPDATE SET A.COL_VAL = B.COL_VAL
WHEN NOT MATCHED THEN
INSERT ( A.COL_KEY, A.COL_VAL )
VALUES ( B.COL_KEY, B.COL_VAL )
;
|
cs |
2. 조회 없이, 직접 값(파라미터)을 넘겨주는 경우
'TARGET_TABLE'에 파라미터를 직접(조회하지 않고) 입력하는 예시입니다.
이때 USING에 'DUAL'을 이용하면 됩니다.
1
2
3
4
5
6
7
|
MERGE INTO TARGET_TABLE A
USING DUAL B
ON ( A.COL_KEY = :param1 )
WHEN MATCHED THEN
UPDATE SET A.COL_VAL = :param2
WHEN NOT MATCHED THEN
INSERT A.COL_VAL = :param2
VALUES ( :param1, :param2 )
;
|
cs |
3. UPDATE 또는 INSERT하는 조건 제외
MERGE INTO 구문을 조금 변형해서 사용할 수도 있습니다.
'WHEN MATCHED THEN'을 제외하거나
1
2
3
4
5
6
7
|
-- 일치하지 않을때만 INSERT
MERGE INTO TARGET_TABLE A
USING DUAL B
ON ( A.COL_KEY = :param1 )
WHEN NOT MATCHED THEN
INSERT ( A.COL_KEY, A.COL_VAL )
VALUES ( :param1, :param2 )
;
|
cs |
'WHEN NOT MATCHED THEN'을 제외하고도 사용할 수 있습니다.
1
2
3
4
5
6
7
|
-- 일치하는 경우에만 UPDATE
MERGE INTO TARGET_TABLE A
USING DUAL B
ON ( A.COL_KEY = :param1 )
WHEN MATCHED THEN
UPDATE SET A.COL_VAL = :param2
;
|
cs |
* 참고
비교 조건을 추가하고 싶은 경우 AND나 OR을 ON 안에 넣어줍니다.
단, 주의사항은 비교 값은 고유의 값이 되어야 중복이 발생하지 않습니다.
'[개발] Programming > Database' 카테고리의 다른 글
오라클, 숫자에 콤마 넣는 방법 (TO_CHAR) (0) | 2019.08.11 |
---|---|
오라클, VARCHAR2 날짜를 원하는 포멧으로 변경하는 방법 (0) | 2019.08.09 |
오라클 날짜(DATE) 비교, to_date, to_char 함수 (0) | 2019.07.31 |
ora-01843: not a valid month, 지정한 월이 부적합합니다. (0) | 2019.06.01 |
ora-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. 오류 (0) | 2019.05.28 |
댓글