답변주셔서 감사합니다.
pgsql 에서 발생되는 문제들입니다.
말씀하신대로 각각 sql문만 심플한 예제로 다시 해보니까
INSERT INTO t1(no,partNum) values(11, '5678') ON CONFLICT(no) DO UPDATE SET qty=3;
ON CONFLICT(no) 에서 보면 해당컬럼(no) 가 unique 이어야만 실행이 되더라구요.
이때 unique가 아닐때 실행할 수 있는 방법이 있을까요?
두번째로
WITH tempSelect (no, partNum, qty)
AS
(
SELECT no, '111' AS partNum, 999 AS qty FROM t2
WHERE no=3
)
, upsert AS
(
UPDATE t1 SET qty=333 WHERE no=111 RETURNING *
)
INSERT INTO t1 (no, partNum, qty)
SELECT * FROM tempSelect WHERE NOT EXISTS(SELECT * FROM upsert)
;
이렇게 하면 문제없이 작동하는데
mybatis 에서 원래 코드를 입력해서 보면
<insert id="excel_cartUSA" parameterType="java.util.List">
<foreach collection="list" item="element" index="index" >
WITH tempSelect (country, b_Name, partNum, description, qty, id, vinNum, memo)
AS
(
SELECT country, b_name, partNum, description, #{element.qty} AS qty, #{element.id} AS id, #{element.vinNum} AS vinNum, #{element.memo} AS memo FROM vParts_All
WHERE partNum=#{element.partNum} AND country='USA'
)
,upsert AS
(
UPDATE cart SET qty=#{element.qty}, vinNum=#{element.vinNum}, memo=#{element.memo} WHERE partNum=#{element.partNum} AND id=#{element.id} RETURNING *
)
INSERT INTO cart (country, b_Name, partNum, description, qty, id, vinNum, memo)
SELECT * FROM tempSelect WHERE NOT EXISTS (SELECT * FROM upsert)
</foreach>
</insert>
syntax error at or near "WITH" 에러가 뜨네요.
mybatis 에서 foreach 때문인가 싶기도 하고 ... 알수가 없네요..