2012-03-19 6 views
-2

세금을 찾기 위해 코드를 작성했지만 지금은 10 lac plss 이상의 수입을 위해 일하고 있습니다. 내 생각 엔 당신이 하나의 IF 문이 아닌 별도의 세 가지 IF 문을 원하는 여기oracle.i에서 세금을 찾기 위해 쿼리를 작성하고 싶습니다. 작성했지만 작동하지 않습니다. plss 체크하고 도와주세요.

CREATE OR REPLACE FUNCTION tax_func (p_sal IN NUMBER) 
    RETURN NUMBER 
IS 
    tax  NUMBER := 0; 
    v_tsal NUMBER := 0; 
    v_sal NUMBER; 
BEGIN 
    v_sal := p_sal * 12; 
    IF v_sal > 1000000 
    THEN 
     v_tsal := v_sal - 1000000; 
     tax := (v_sal * 0.3); 
     v_sal := v_sal - v_tsal; 
    END IF; 
    IF v_sal > 500000 
    THEN 
     v_tsal := v_sal - 500000; 
     tax := (v_sal * 0.2); 
     v_sal := v_sal - v_tsal; 
    END IF; 
    IF v_sal > 200000 
    THEN 
     v_tsal := v_sal - 200000; 
     tax := tax + (v_sal * 0.1); 
    END IF; 
    RETURN tax; 
END; 
/
+2

"작동하지 않음"을 정의하는 것이 도움이됩니다. 결과물은 무엇입니까? 당신은 어떤 결과물을 얻고 있습니까? –

답변

0

코드 out`enter 도와주세요. 약자로 v_sal이 1 백만보다 크면 IF 문은 모두 TRUE으로 평가되므로 최종 결과는 항상 최종 IF 문이 궁극적으로 세금을 계산하게됩니다.

CREATE OR REPLACE FUNCTION tax_func (p_sal IN NUMBER) 
    RETURN NUMBER 
IS 
    tax  NUMBER := 0; 
    v_tsal NUMBER := 0; 
    v_sal NUMBER; 
BEGIN 
    v_sal := p_sal * 12; 
    IF v_sal > 1000000 
    THEN 
     v_tsal := v_sal - 1000000; 
     tax := (v_sal * 0.3); 
     v_sal := v_sal - v_tsal; 
    ELSIF v_sal > 500000 
    THEN 
     v_tsal := v_sal - 500000; 
     tax := (v_sal * 0.2); 
     v_sal := v_sal - v_tsal; 
    ELSIF v_sal > 200000 
    THEN 
     v_tsal := v_sal - 200000; 
     tax := tax + (v_sal * 0.1); 
    END IF; 
    RETURN tax; 
END; 
/