实例

1.编写一段PL/SQL,实现计算个人

所得税计算逻辑。(参考图例的扣除方法)
3500免征
如果超过3500,按以下阶段方式扣除
--小于1500时,税率按3%,速算扣除数0
--在1500到4500区间时,税率10%,速算扣除数105
--在4500到9000区间时,税率20%,速算扣除数555
--大于等于9000时,税率25%,速算扣除数1005
示例:
4000-3500=500*0.03-0=15
6000-3500=2500*0.1-105=145
declare
  v_sal number(10):= 10000;
  v_tax number(7,2);
  v_tax_sal number(10);
begin
  --计算出应交税的工资部分
  v_tax_sal := v_sal-3500;
  --判断区间
  if v_tax_sal<1500 then
     v_tax := v_tax_sal*0.03;
  elsif v_tax_sal<4500 then
     v_tax := v_tax_sal*0.1-105;
  elsif v_tax_sal<9000 then
     v_tax := v_tax_sal*0.2-555;
  else
     v_tax := v_tax_sal*0.25-1005;
  end if;
  dbms_output.put_line('工资:'||v_sal);
  dbms_output.put_line('交税:'||v_tax);
end;
 
//新增需求
根据EMP表记录生成纳税记录表的信息
纳税记录表EMP_TAX
主键ID
员工编号EMPNO
员工名称ENAME
员工工资总额SAL (EMP中SAL+COMM合计)
纳税额TAX(根据前面扣税逻辑计算的金额)
纳税时间TAX_DATE(系统时间)
编写一个PL/SQL完成上述功能
create table emp_tax(
 ID NUMBER primary key,
 EMPNO NUMBER(4),
 ENAME VARCHAR2(10),
 SAL NUMBER(7,2),
 TAX NUMBER(7,2),
 TAX_DATE DATE
);
create sequence tax_seq;
 
-----PL/SQL---------
declare
 CURSOR c_emp IS select * from emp;
 v_emp emp%ROWTYPE;--记录变量,保存一行员工信息
 v_total emp.sal%TYPE;--工资总额
 v_tax_sal emp.sal%TYPE;--交税工资
 v_tax emp.sal%TYPE;--交税金额
begin
  OPEN c_emp;
  LOOP
  --循环取出EMP表每一行员工记录
    fetch c_emp into v_emp;
    exit when c_emp%NOTFOUND;
  --计算员工应交税金额TAX
    v_total := v_emp.sal+NVL(v_emp.comm,0);
    v_tax_sal := v_total-3500;
  --判断区间
    if v_tax_sal<=0 then
      v_tax :=0;
    elsif v_tax_sal<1500 then
      v_tax := v_tax_sal*0.03;
    elsif v_tax_sal<4500 then
      v_tax := v_tax_sal*0.1-105;
    elsif v_tax_sal<9000 then
      v_tax := v_tax_sal*0.2-555;
    else
      v_tax := v_tax_sal*0.25-1005;
    end if;
  --将EMP_TAX所需的字段值写入INSERT
    insert into EMP_TAX(id,empno,
     ename,sal,tax,tax_date)
    values(tax_seq.nextval,v_emp.empno,
     v_emp.ename,v_total,v_tax,sysdate);
  END LOOP;
  CLOSE c_emp;
  commit;--提交操作
end;

 

posted @ 2016-05-16 13:54  YunMan  阅读(177)  评论(0)    收藏  举报