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>