个人所得税计算函数 Oracle可用

create or replace function FN_PersonalIncomeTax(p_IncomeValue number)
                        RETURN number
 /*
***************************************************************************************
  过程名称: 计算个人所得税
    过程ID:
      分类:公用
  入口参数:
  出口参数:
            IncomeValue number(18,2) =应税收入
       
   返回值:  应交税额


  关联资源:
    调用方:
  功能描述:
  作者:
  日期
****************************************************************************************
*/
as
    --局部变量
   v_Tax                number(36,2); --应纳个人所得税税额
   v_ChargeAbleTax      number(36,2);--应纳税所得额-扣除标准
   v_Taxrate            number(36,2);--税率
   v_TaxBalance         number(36,2);--速算扣除数

begin

/*
应纳个人所得税税额=(应纳税所得额-扣除标准)*适用税率 - 速算扣除数

扣除标准2000元/月(2008年3月1日起调高为2000元)

个人所得税计算公式
1不超过500元的部分,             税率5%,      速算扣除数为0;
2超过500元至2000元的部分,       税率10%,     速算扣除数为25
3超过2000元至5000元的部分,      税率15 %,    速算扣除数为125
4超过5000元至20000元的部分,     税率20 %,    速算扣除数为375
5超过20000元至40000元的部分,    税率25%,     速算扣除数为1375
6超过40000元至60000元的部分,    税率30%,     速算扣除数为3375
7超过60000元至80000元的部分,    税率35%,     速算扣除数为6375
8超过80000元至100000元的部分,   税率40%,     速算扣除数为10375
9超过100000元的部分,            税率45%,     速算扣除数为15375
*/
   v_tax:=0;
   v_ChargeAbleTax :=p_IncomeValue-2000; --扣除标准2000元
 
  if v_ChargeAbleTax< 0  then
     v_Taxrate :=0;v_TaxBalance:=0;
  end if; 
  if v_ChargeAbleTax>0  and v_ChargeAbleTax<=500 then
     v_Taxrate :=0.05;v_TaxBalance:=0;
  end if;
  if v_ChargeAbleTax>500  and v_ChargeAbleTax<=2000 then
    v_Taxrate :=0.1;v_TaxBalance:=25;
  end if;
  if v_ChargeAbleTax>2000  and v_ChargeAbleTax<=5000  then
     v_Taxrate :=0.15;v_TaxBalance:=125;
  end if;
  if v_ChargeAbleTax>5000  and v_ChargeAbleTax<=20000  then
     v_Taxrate :=0.2;v_TaxBalance:=375;
  end if;
  if v_ChargeAbleTax>20000  and v_ChargeAbleTax<=40000  then
     v_Taxrate :=0.25;v_TaxBalance:=1375;
  end if;
  if v_ChargeAbleTax>40000  and v_ChargeAbleTax<=60000  then
     v_Taxrate :=0.3;v_TaxBalance:=3375;
  end if;
  if v_ChargeAbleTax>60000  and v_ChargeAbleTax<=80000  then
     v_Taxrate :=0.35;v_TaxBalance:=6375;
  end if;
  if v_ChargeAbleTax>80000  and v_ChargeAbleTax<=100000  then
     v_Taxrate :=0.4;v_TaxBalance:=10375;
  end if;
  if v_ChargeAbleTax>100000 then
     v_Taxrate :=0.45;v_TaxBalance:=15375;
  end if;
 


   v_tax:=v_ChargeAbleTax*v_Taxrate-v_TaxBalance;
  
   return v_tax;

EXCEPTION
    WHEN OTHERS THEN
          RETURN v_tax; --SQL 错误
end;
/

posted @ 2009-06-03 09:50  tiasys  阅读(852)  评论(0编辑  收藏  举报