BackEnd/DBMS
Oracle :: MERGE INTO
초록 (green)
2018. 7. 6. 00:14
1. 정의
CRUD중 조건에 따라 CUD가 가능한 명령어이다.
MERGE INTO 조건에 해당하는 행이 존재시 UPDATE / 없으면 INSERT 한다.
2. 구문
1
2
3
4
5
6
7
8
9
10 |
MERGE INTO [스키마.]테이블명
USING (update나 insert될 데이터 원천)
ON (update될 조건)
WHEN MATCHED THEN
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE update 조건
DELETE WHERE update_delete 조건
WHEN NOT MATCHED THEN
INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2,...)
WHERE insert 조건; |
cs |
3. 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
<insert id="mergeBoard">
MERGE INTO BOARD_USER B1
USING (
SELECT USER_ID, DEPT_CD
FROM USER
WHERE DEPT_CD IN (
SELECT DEPT_CD
FROM DEPT
START WITH DEPT_CD = #deptCd#
CONNECT BY PRIOR DEPT_CD = UPPER_DEPT_CD
)
) B2 ON (B1.BOARD_NO - #boardNo# AND B1.USER_ID = B2.USER_ID)
WHEN MATCHED THEN
UPDASTE SET B1.BOARD_AUTTHOR = #boardAuthor#
WHEN NOT MATCHED THEN
INSERT (BOARD_NO, USER_ID, BOARD_AUTHOR)
VALUES (#boardNo#, B2.USER_ID, #boardAuthor#)
</insert> |
cs |
4. 참고사항
CLOB 타입을 사용시 2000bytes가 넘을 때에는 ORA-06600 오류가 발생한다.
또한, ON 절에 기술된 컬럼이 WHEN MATCHED THEN 다음에 오는 UPDATE 행에는 올 수 없다.
UPDATE할 컬럼의 PK, UK 등을 명시하지 않으며, INSERT 시에는 PK, UK등의 값을 넣어야 한다.