게으른 완벽주의자의 개발자 도전기
장바구니 같은 상품 추가(merge(INSERT + UPDATE) into table using dual) 본문
장바구니에 상품을 넣을 때 만약 장바구니에 같은 품목이 있다면
장바구니에 있는 상품의 수량과 총가격이 변경 되도록 만들고자 한다.
<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>
'SQL' 카테고리의 다른 글
mapper 서브쿼리 작성 두가지 방법 (selectKey) (1) | 2022.09.21 |
---|---|
[DATABASE]union view 다중 insert (0) | 2022.08.21 |
ITEM_CODE(ITEM_001)쿼리로 만들기(LPAD, TO_NUMBER, SUBSTR, MAX, NVL, || 활용하기) (0) | 2022.08.13 |
오라클SQL Developer실행안됨 (windows를 복원하는 중) (0) | 2022.08.06 |
DataBase 주요 함수 정리 (0) | 2022.08.03 |