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;