Oracle에서 데이터가 없으면 INSERT, 이미 데이터가 있으면 UPDATE
*하나의 쿼리로 두 가지 경우를 해결할 수 있다.
▷ 사용법
--쿼리 대상 [TABLE/VIEW]
MERGE INTO [TABLE/VIEW]
--비교대상 [TABLE/VIEW], DUAL은 위와 동일 할때 사용(쿼리 대상 [TABLE/VIEW])
USING [TABLE/VIEW/DUAL] ON
(
-- 조건에 사용한 COLUMN은 UPDATE 불가
[조건]
)
--조건 일치 시 UPDATE
WHEN MATCHED THEN
UPDATE SET
[COLUMN1] = [VALUE1],
[COLUMN2] = [VALUE2],
[COLUMN3] = [VALUE3],
...
-- UPDATE후 DELETE 사용 가능(DELETE 단독 사용 안됨)
[DELETE WHERE [COLUMN1] = [VALUE1]]
-- 조건 불일치 시 INSERT
WHEN NOT MATCHED THEN
INSERT
(
[COLUMN1],
[COLUMN2],
[COLUMN3],
...
)
VALUES
(
[VALUE1],
[VALUE2],
[VALUE3],
...
)
▷ Example
- 학생들의 년월 학점을 등록/수정
- 학생들의 정보를 list로 넘겨 foreach를 사용해 쿼리를 반복 수행
<update id="example" parameterType="java.util.List">
BEGIN
<foreach collection="list" item="item" separator=" ">
MERGE INTO GRADES_TABLE AS T
USING DUAL ON
(
T.STUDENT_ID = #{item.studentId}
AND T.YYMM = #{item.yymm}
)
WHEN MATCHED THEN
UPDATE SET
GRADES= #{item.grades},
UPD_ID= #{item.id},
UPD_DTM=SYSTIMESTAMP
WHEN NOT MATCHED THEN
INSERT
(
DEPARTMENT_ID,
STUDENT_ID,
GRADES,
YYMMDD,
RGST_ID,
RGST_DTM,
UPD_ID,
UPD_DTM
)
VALUES
(
#{item.departmentId},
#{item.studentId},
#{item.grades},
#{item.yymm},
#{item.id},
SYSTIMESTAMP,
#{item.id},
SYSTIMESTAMP
);
</foreach>
END;
</update>
▷ 관련 글
Mybatis Oracle BEGIN-END(PL/SQL)
한 번에 쿼리를 2개 이상 실행해야 하는 경우 사용 *PL/SQL에 대한 설명은 간단히 하고, Mybatis에서 어떻게 사용했는지를 다룰 예정 ▷ PL/SQL(Oracle's Procedural Language extension to SQL)이란 오라클에서 제공
coding-today.tistory.com
Mybatis foreach문(반복문/동적 SQL)
List or Array 형태의 동적인 값을 반복 처리하기 위해 사용 ▷ 기본 형태 ... ▷ 지원 태그 태그 명 태그 설명 collection 전달 받은 인자 item 전달 받은 인자 Alias(별명) open 구문 시작 시 들어갈 문자열 c
coding-today.tistory.com
MySql ON DUPLICATE KEY UPDATE 구문
MySql에서 데이터가 없으면 INSERT, 이미 데이터가 있으면 UPDATE *하나의 쿼리로 두 가지 경우를 해결할 수 있다. ▷ 사용법 INSERT INTO [TABLE] ( [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4] ) VALUES ( [VALUES1], [VALUES2],
coding-today.tistory.com
'▶ Back-End > DataBase' 카테고리의 다른 글
Cassandra Snapshot Backup And Restore 방법 (2) | 2023.10.04 |
---|---|
MySql ON DUPLICATE KEY UPDATE 구문 (0) | 2023.08.02 |
Mybatis Oracle BEGIN-END(PL/SQL) (0) | 2021.02.04 |
Mybatis foreach문(반복문/동적 SQL) (0) | 2021.02.04 |
Mybatis Oracle Paging Query(더보기 기능) (0) | 2021.02.03 |
댓글