본문 바로가기

Skill Tree🌲/SQL

[postgresql] MYBATIS foreach문 INSERT, UPDATE 여러개

[문제]

복수개를 선택하여 등록 버튼을 통해 INSERT와 UPDATE동시 실행

 

[고안]

1. 백단에서 MERGE INTO를 사용하여 바로 UPDATE와 INSERT를 실행하였으나, 기존의 값을 비교하는 과정이 없어 실패

2. 프론트단에서 기존의 값과 비교하여 같은 것과 없는 것을 나누어 각각의 파라미터를 만들고, axois를 두 개실행시켜 백단으로 넘겨주려고 했으나, 프론트단에서 파라미터를 나누는데 실패

 

[해결]

백단에서 SELECT문을 한번 거친 후에 UPDATE와 INSERT를 나누는 방법으로 해결

WITH TMP AS (
    UPDATE 
        table_nm 
    SET 
        col1 = #{val1}
        , col2 = #{val2}

    WHERE 					-- ORACLE MERGE INTO에서의 ON조건
        col3 	= #{col3}
    AND col4 	= #{col4}		
    
RETURNING *)

    INSERT INTO
        table_nm ( col1, col2, col3, col4, col5)
    SELECT 
        #{val1}, #{val2}, #{col3}, #{col4}, CURRENT_TIMESTAMP
WHERE NOT EXISTS (SELECT * FROM TMP)