SQL
장바구니 같은 상품 추가(merge(INSERT + UPDATE) into table using dual)
머리방울
2022. 8. 22. 17:31
장바구니에 상품을 넣을 때 만약 장바구니에 같은 품목이 있다면
장바구니에 있는 상품의 수량과 총가격이 변경 되도록 만들고자 한다.
<insert id="insertCart">
MERGE INTO SHOP_CART
USING DUAL <!-- 문법 외울 것 -->
ON (ITEM_CODE = #{itemCode} AND MEM_ID =#{memId})
내 장바구니에 같은 상품이 있다면
WHEN MATCHED THEN
UPDATE
SET
(총 수량은 기존에 있던 수량에서 새롭게 추가된 수량을 더한 값으로)
PUT_CNT = PUT_CNT + #{putCnt} (기존 값 + 새로운 값 )
총가격은 수량 * 단가
, TOTAL_PRICE = (PUT_CNT + #{putCnt}) *
(SELECT ITEM_PRICE FROM SHOP_ITEM WHERE ITEM_CODE = #{itemCode})
WHERE MEM_ID = #{memId}
AND ITEM_CODE = #{itemCode}
내 장바구니에 같은 상품이 없다면 INSERT 쿼리가 실행되도록 만든다
WHEN NOT MATCHED THEN
INSERT (CART_CODE
, ITEM_CODE
, MEM_ID
, PUT_CNT
, TOTAL_PRICE
) VALUES(
(SELECT 'CART_' ||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(CART_CODE, 6))),0) +1 , 3, 0) FROM SHOP_CART)
, #{itemCode}
, #{memId}
, #{putCnt}
, #{putCnt} * (SELECT ITEM_PRICE
FROM SHOP_ITEM
WHERE ITEM_CODE = #{itemCode})
)
</insert>