2012-03-19 9 views
-2

を私を助け主生命維持装置働いていません私の推測では、単一のIFの文ではなく、3つの別々のIFステートメントをしたいということで、ここではoracle.iに税を見つけるにクエリを書きたいことを書いていたが、それをチェックして、私は税を見つけるためのコードを書いていたが、その、今10本のlac主生命維持装置の上の収入のために働いて

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が100万以上である場合には、3つのすべてのIFのステートメントは、最終的な結果は常に最終IF文は最終的に税を計算していることになりますのでTRUEと評価されます。

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; 
/