MySQL ν¨μ μ¬λ°λ₯΄κ² μμ±νμΌλ λ°νκ°μ΄ μ μμ μ΄μ§ μμ κ²½μ°
μμ±μΌμ: 2023λ 7μ 12μΌ
βκ²°λ‘
ν¨μ λ΄λΆμμ μ μν λ³μμ SELECT ... INTO
ꡬ문μΌλ‘ κ°μ λ£μ΄μ€ λ 컬λΌλͺ
κ³Ό λ³μλͺ
μ΄ λμΌνμ§ νμΈν΄λ³΄μ. μ΄ κ²½μ°μ κ°μ μ λλ‘ λ£μ΄μ£Όμ§ λͺ»ν¨. λμ΄ μΆ©λλμ§ μκ² λ³μμ μ΄λ¦μ μ»¬λΌ μ΄λ¦κ³Ό λ€λ₯΄κ² μ§μ ν΄μ£Όλ©΄ λλ€.
SELECT BNEF_TP, CPN_BNEF
INTO BNEF_TP, CPN_BNEF
FROM COUPON
WHERE CPN_ID = v_CPN_ID;
SELECT BNEF_TP, CPN_BNEF
INTO V_BNEF_TP, V_CPN_BNEF
FROM COUPON
WHERE CPN_ID = P_CPN_ID;
πλ¬Έμ μ μ
GET_ORGN_PAY_AMT
λ μΏ ν°μμ΄λλ₯Ό μ£Όλ©΄ μ£Όμ΄μ§ κΈμ‘(V_ORD_AMT)μ λν΄μ μΏ ν°ν μΈμ μ μ©ν κΈμ‘μ λ°νν΄μ£Όλ ν¨μλ€.
μΏ ν° μμ΄λ 2λ²μ μ£Όμ΄μ 5%ν μΈμ΄ μ μ©λμ΄ 428640
μμ΄ λ°νλμ΄μΌ μ μμ΄λ λ΄κ° μ
λ ₯ν 451200
μμ΄ κ·Έλλ‘ λμ΄

ν¨μ μ½λ μ체λ μλͺ»λ λΆλΆμ΄ μμ
GET_ORGN_PAY_AMT(ν¨μ)
CREATE
DEFINER = syur1@`%` FUNCTION GET_ORGN_PAY_AMT(v_ORD_AMT double, v_CPN_ID int) RETURNS double DETERMINISTIC
BEGIN
DECLARE ORGN_PAY_AMT DOUBLE; -- μκ²°μ κΈμ‘
DECLARE BNEF_TP CHAR(2); -- νννμ
(μΏ ν°ν μΈμ¨/κΈμ‘)
DECLARE CPN_BNEF DOUBLE; -- μΏ ν°νν
-- 1. μΏ ν°μμ΄λλ‘ νννμ
κ³Ό μΏ ν°ννμ μ‘°νν΄μ¨λ€.
SELECT BNEF_TP, CPN_BNEF
INTO BNEF_TP, CPN_BNEF
FROM COUPON
WHERE CPN_ID = v_CPN_ID;
-- 2. μ£Όλ¬ΈκΈμ‘μμ μΏ ν°μ μ μ©ν κΈμ‘μ κ³μ°νλ€.
IF BNEF_TP = '01' THEN -- ν μΈμ¨μΈ κ²½μ°
SET ORGN_PAY_AMT = v_ORD_AMT - (v_ORD_AMT * (CPN_BNEF / 100));
ELSEIF BNEF_TP = '02' THEN -- ν μΈ κΈμ‘μΈ κ²½μ°
SET ORGN_PAY_AMT = v_ORD_AMT - CPN_BNEF;
ELSE
SET ORGN_PAY_AMT = v_ORD_AMT;
END IF;
RETURN TRUNCATE(ORGN_PAY_AMT, 0);
END;
βμμΈ & ν΄κ²°λ°©λ²
ν¨μ μ½λ μ체μλ λ¬Έμ κ° μμ΄μ ν¨μλ΄μμ μ¬μ©νλ κ°λ€μ λ°νν΄λ³΄λ©΄μ λλ²κΉ μ ν΄λ³΄κ³ μμλλ° BNEF_TPλ₯Ό λ°ννμ λ NULLλ‘ λ°νμ΄ λμ΄μ νΉμλνκ³ ν μ΄λΈμ 컬λΌλͺ κ³Ό κ²ΉμΉμΉμκ² λ³μλͺ μ λ°κΏλ³΄λ μ λλ‘ λμνλ€.
ν¨μ λ΄λΆμμ μ μν λ³μμ SELECT ... INTO
ꡬ문μΌλ‘ κ°μ λ£μ΄μ€ λ 컬λΌλͺ
κ³Ό λ³μλͺ
μ΄ λμΌν κ²½μ° κ°μ μ λλ‘ λ£μ΄μ£Όμ§ λͺ»ν¨. λμ΄ μΆ©λλμ§ μκ² λ³μμ μ΄λ¦μ μ»¬λΌ μ΄λ¦κ³Ό λ€λ₯΄κ² μ§μ ν΄μ£Όλ©΄ λλ€.
SELECT BNEF_TP, CPN_BNEF
INTO BNEF_TP, CPN_BNEF
FROM COUPON
WHERE CPN_ID = v_CPN_ID;
SELECT BNEF_TP, CPN_BNEF
INTO V_BNEF_TP, V_CPN_BNEF
FROM COUPON
WHERE CPN_ID = P_CPN_ID;
CREATE
DEFINER = syur1@`%` FUNCTION GET_ORGN_PAY_AMT(P_ORD_AMT double, P_CPN_ID int) RETURNS double DETERMINISTIC
BEGIN
DECLARE V_ORGN_PAY_AMT DOUBLE; -- μκ²°μ κΈμ‘
DECLARE V_BNEF_TP char(2); -- νννμ
(μΏ ν°ν μΈμ¨/κΈμ‘)
DECLARE V_CPN_BNEF int; -- μΏ ν°νν
-- 1. μΏ ν°μμ΄λλ‘ νννμ
κ³Ό μΏ ν°ννμ μ‘°νν΄μ¨λ€.
SELECT BNEF_TP, CPN_BNEF
INTO V_BNEF_TP, V_CPN_BNEF
FROM COUPON
WHERE CPN_ID = P_CPN_ID;
-- 2. μ£Όλ¬ΈκΈμ‘μμ μΏ ν°μ μ μ©ν κΈμ‘μ κ³μ°νλ€.
IF V_BNEF_TP = '01' THEN -- ν μΈμ¨μΈ κ²½μ°
SET V_ORGN_PAY_AMT = P_ORD_AMT - (P_ORD_AMT * (V_CPN_BNEF / 100));
ELSEIF V_BNEF_TP = '02' THEN -- ν μΈ κΈμ‘μΈ κ²½μ°
SET V_ORGN_PAY_AMT = P_ORD_AMT - V_CPN_BNEF;
ELSE
SET V_ORGN_PAY_AMT = P_ORD_AMT;
END IF;
RETURN TRUNCATE(V_ORGN_PAY_AMT, 0);
END;
2μκ° μ½μ§ν μμΈμ΄ μ΄κ±°μλ€λ ν무νκΈ΄ νλ°.. κ·Έλλ λλΆμ ν¨μ λ΄λΆμμ μ¬μ©ν λ³μλͺ μ λμ¬ κ·μΉλ μ νκ²λμλ€!
- λ§€κ°λ³μ μ λμ¬: 'P_'
- μμ: P_ORD_AMT, p_CPN_ID
- ν¨μ λ΄λΆ λ³μ μ λμ¬: 'V_'
- μμ: V_ORGN_PAY_AMT, V_BNEF_TP, V_CPN_BNEF
- ν¨μ λ΄λΆ μμ μ λμ¬: 'C_'
- μμ: C_DISCOUNT_RATE, C_MAX_AMOUNT
Uploaded by N2T