.编写函数计算个人所得税:个人收入(除去各项保险及住房公积金)外超过1600元的,需交个人所得税。用月收入减去1600,看其余额是多少。
   余额在500元及500元以下的,用余额乘以5%。
   余额在501—2000元的,用余额乘以10%-25元。
   余额在2001—5000元的,用余额乘以15%-125元。
   余额在5000—20000元的,用余额乘以20%-375元。

解决方案 »

  1.   

    我不知道还有没有更好的方法:create or replace function persontax(uf_in number)
    return number 
    IS
      v_tax NUMBER(10);
    begin
      IF uf_in<1600 THEN 
               dbms_output.put_line('收入有点低,需要努力!!');
          ELSIF(uf_in-1600)>=0 AND(uf_in-1600)<=501 THEN
               v_tax := (uf_in-1600)*0.05;
          ELSIF(uf_in-1600)>=500 AND(uf_in-1600)<=2000 THEN
               v_tax := (uf_in-1600)*0.10-25;
          ELSIF (uf_in-1600)>=2001 AND (uf_in-1600)<=5000 THEN
               v_tax := (uf_in-1600)*0.15-125;
          ELSIF (uf_in-1600)>=5001 AND(uf_in-1600)<=20000 THEN
               v_tax := (uf_in-1600)*0.20-375; 
      END IF;             
      return(v_tax);
    end persontax;
      

  2.   

    CREATE OR REPLACE FUNCTION person_rate_fun (v_sal NUMBER)
    RETURN NUMBER
    IS
      v_money NUMBER(18,2);
      v_rate NUMBER(18,2);
    BEGIN
      v_money := v_sal - 1600; -- 月收入不足1600的,无个人所得税一说
      IF v_money < 0 THEN
        v_rate := 0;
      ELSIF v_money > 0 AND v_money <= 500 THEN
        v_rate := v_money * 0.05;
      ELSIF v_money > 500 AND v_money <= 2000 THEN
        v_rate := v_money * 0.1 - 25;
      ELSIF v_money > 2000 AND v_money <= 5000 THEN
        v_rate := v_money * 0.15 - 125;
      ELSIF v_money >= 5000 AND v_money <= 2000 THEN
        v_rate := v_money * 0.20 - 375;
      ELSE
        v_rate := v_money * 0.25 - 575;
      END IF;
      return v_rate;
    EXCEPTION
      WHEN OTHERS
      THEN
        RETURN -1;
    END;
    /