by 치즈와두부 [2016.10.24 16:34:30]
create or replace FUNCTION "FN_TEMP"
( p_inspno IN VARCHAR2 -- 신청번호
) RETURN VARCHAR2
is
v_lnkind VARCHAR2(7); -- 상품군
v_agentid VARCHAR2(6) :=''; -- ID
v_saleamt VARCHAR2(8); -- ㄷ금액
v_return VARCHAR2(8); -- ㅇㅇㅂㄷ비용
--
BEGIN
BEGIN
select
l1.agent_id
, l1.sale_amt
, (select ln_kind from cmc004tm where goods_cd = l1.goods_cd)
into
v_agentid
, v_saleamt
, v_lnkind
from lnc001tm l1
where l1.insp_no = p_inspno;
END;
--
--ㅈㅈㅇ
IF V_lnkind = 'LAA0010' THEN
CASE
WHEN v_saleamt <= 5000000 THEN
v_return := v_saleamt * 0.05;
WHEN v_saleamt > 5000000 and v_saleamt <= 10000000 THEN
v_return := 250000 + (v_saleamt - 5000000)*0.04 ;
WHEN v_saleamt > 10000000 and v_saleamt <= 20000000 THEN
v_return := 450000 + (v_saleamt - 10000000)*0.03 ;
END
END IF;
--ㅎ
IF v_lnkind = 'LAA0020' THEN
CASE
WHEN v_agentid = AG0001 THEN v_return := v_saleamt * 2.75;
WHEN v_agentid != AG0001 THEN v_return := v_saleamt * 2.42;
END
END IF;
--ㅅ
IF v_lnkind = 'LAA0040' THEN v_return := v_saleamt * 3.85;
END
END IF;
--
return v_return;
END FN_TEMP;
오류메세지로 이게 뜹니다..
PLS-00103: 심볼 "END"를 만났습니다 다음 중 하나가 기대될 때: case
function, procedure에서는 case when 이 아니라 if 문 쓰세요. 그리고 전반적으로 예외처리가 전혀 안 되어있네요. 예외처리 구문 추가하시구요.
그리고 계산값인데 RETURN형이 VARCHAR2형인데 맞나요?
CREATE OR REPLACE FUNCTION "FN_TEMP" ( P_INSPNO IN VARCHAR2 -- 신청번호 ) RETURN VARCHAR2 IS V_LNKIND VARCHAR2(7); -- 상품군 V_AGENTID VARCHAR2(6) :=''; -- ID V_SALEAMT VARCHAR2(8); -- ㄷ금액 V_RETURN VARCHAR2(8); -- ㅇㅇㅂㄷ비용 BEGIN BEGIN SELECT L1.AGENT_ID , L1.SALE_AMT , (SELECT LN_KIND FROM CMC004TM WHERE GOODS_CD = L1.GOODS_CD) INTO V_AGENTID , V_SALEAMT , V_LNKIND FROM LNC001TM L1 WHERE L1.INSP_NO = P_INSPNO; EXCEPTION WHEN OTHERS THEN V_AGENTID := NULL; END; IF V_AGENTID IS NULL THEN RETURN NULL; END IF; --ㅈㅈㅇ IF V_LNKIND = 'LAA0010' THEN IF V_SALEAMT <= 5000000 THEN V_RETURN := V_SALEAMT * 0.05; ELSIF V_SALEAMT > 5000000 AND V_SALEAMT <= 10000000 THEN V_RETURN := 250000 + (V_SALEAMT - 5000000)*0.04 ; ELSIF V_SALEAMT > 10000000 AND V_SALEAMT <= 20000000 THEN V_RETURN := 450000 + (V_SALEAMT - 10000000)*0.03 ; END IF; END IF; --ㅎ IF V_LNKIND = 'LAA0020' THEN IF V_AGENTID = 'AG0001' THEN V_RETURN := V_SALEAMT * 2.75; ELSIF V_AGENTID != 'AG0001' THEN V_RETURN := V_SALEAMT * 2.42; END IF; END IF; --ㅅ IF V_LNKIND = 'LAA0040' THEN V_RETURN := V_SALEAMT * 3.85; END IF; RETURN V_RETURN; EXCEPTION WHEN OTHERS THEN RETURN NULL; END FN_TEMP;