Merge 문은 조건에 따라 INSERT / UPDATE || DELETE 를 할 수 있는 구문입니다.
MyBatis를 사용하는 경우 mapper.xml에 사용하는 태그도 다르니 참고하면 됩니다.
다른 블로그나, 티스토리 등 구글링을하면 기본적인 문법이 나와서
따로 정리하지는 않고, 대신 DB별로 자기 자신 테이블을 조회하는 문법을 정리하려고 합니다
보다 다양한 Merge문법은 아래 DB별 링크를 참고하면 됩니다.
DB2
MyBatis : <update></update>
DAO.java : update
1
2
3
4
5
6
7
8
9
10
11
12
|
MERGE INTO testTable -- 최종적으로 처리 결과 적용될 테이블
USING (VALUES (1)) AS Source (Number) --비교 테이블이 자기 자신테이블
ON ( -- 처리 결정 조건)
WHEN MATCHED THEN
-- 쿼리 (insert || update || delete)
WHEN NOT MATCHED THEN
-- 쿼리 (insert || update || delete)
ELSE IGNORE -- 그외 무시
Colored by Color Scripter
|
Maria DB
( https://mariadb.com/kb/en/insert-on-duplicate-key-update/ )
MyBatis : <insert></insert>
DAO.java : insert
1
2
3
4
5
6
7
8
9
10
11
|
-- Merge 문이 없다.. 비슷한 역할을 하는 문법으로 Merge문 대체
-- DELETE 는 안되는 듯. INSERT || UPDATE
INSERT INTO 결과테이블
( )
VALUES
( )
ON DUPLICATE KEY UPDATE
A = #{a}
|
MS-SQL
( https://docs.microsoft.com/ko-kr/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15 )
MyBatis : <update></update>
DAO.java : update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-- mappper.xml작성시 쿼리문 마지막에 ";" 필수로 붙여야한다. 안 그러면 에러발생
-- Merge문에서 insert할때 sequence를 사용할 수 없다! (중요) 따라서 selectKey로 먼저 시퀀스 조회 후 사용해야 한다.
-- 이렇게 시퀀스를 조회하면 VO의 해당 필드값에 적용이 바로 되기 때문에 Insert문에서 파라미터로 넘겨주기만 하면 된다.
-- BEFORE : Merge문 전에 먼저 실행한다.
<selectKey keyProperty="시퀀스 필드값" resultType="String" order="BEFORE">
SELECT NEXT VALUE FOR 시퀀스
</selectKey>
MERGE INTO 최종 결과 적용 테이블
USING (VALUES(1)) DUAL (Number) -- 자기 자신 테이블
ON ( -- 처리 결정하는 조건 )
-- ON 조건과 일치하는 경우
WHEN MATCHED THEN
-- 쿼리문
WHEN NOT MATCHED THEN
-- 쿼리문
;
Colored by Color Scripter
|
Oracle
( 공식 레퍼런스보다 구글링이 더 이해하기 쉽습니당... )
MyBatis : <update></update>
DAO.java : update
1
2
3
4
5
6
7
8
9
|
MERGE INTO 최종 결과 적용 테이블
USING DUAL
ON ( -- 처리 결정하는 조건)
WHEN MATCHED THEN
-- 쿼리문
WHEN NOT MATCHED THEN
-- 쿼리문
|
'DataBase' 카테고리의 다른 글
[HackerRank] Ollivander's Inventory (0) | 2020.07.12 |
---|---|
[HackerRank] Symmetric Paris (0) | 2020.06.10 |
[Oracle] 페이징, concat 등 표현 (0) | 2019.06.02 |
INSERT문에 SELECT 가능! (0) | 2019.06.02 |
[MySQL] 페이징 시 쿼리 LIMIT, OFFSET (0) | 2019.06.02 |
댓글