select deptno into v_deptno from emp where ename='SCOTT'; if
v_deptno='10' then
addsal:=100; elsif
v_deptno='20' then addsal:=300; else
addsal:=400; end if;
update emp set sal=sal+addsal where
ename='SCOTT';
dbms_output.put_line(sal); end;
给出运行测试结果:
3. 编写程序,计算显示部门人数最多的部门号、人数、工资总和,以及部门人数最少的部
门号、人数、工资总和。 写出程序源码:
给出运行测试结果:
4. 计算Exam_EMP中所有雇员的所得税总和。假设所得税为累进税率,所得税算法为:
工资收入为0-2000为免税;收入2000-3000者,超过2000的部分税率10%;3000-4000者超过3000部分按20%税率计算;4000-5000者超过4000部分按30%税率计算;5000以上收入,超过5000部分按40%税率计算。(请查阅累进税率的概念) 写出程序源码: Declare
sum_xx number:=0; xx number;
begin
select sum((sal-2000)*0.1) into xx from emp where sal>2000 and sal<=3000; sum_xx:=sum_xx+xx;
select sum((sal-3000)*0.2+100) into xx from emp where sal>3000 and sal<=4000;
第 21 页 共 24 页
sum_xx:=sum_xx+xx;
select sum((sal-4000)*0.3+300) into xx from emp where sal>4000 and sal<=5000; sum_xx:=sum_xx+xx;
select sum((sal-5000)*0.4+600) into xx from emp where sal>5000; sum_xx:=sum_xx+xx;
dbms_output.put_line(sum_xx); end;
给出运行测试结果:
5. 假设有个表如Exam_EMP,未建立主键,含有多条记录重复(列值完全相同),试编制
一个PL/SQL,将多余的重复记录删除。 写出程序源码: variable al number; begin :al:=1000; end; /
begin
dbms_output.put_line(:al); end; /
给出运行测试结果:
参照前面实验和教材,完成以下实验作业,给出源程序和测试结果。
6. 编写一个PL/SQL程序块,对名字以\或\开始的所有雇员按他们的基本薪水的10%
第 22 页 共 24 页
加薪。
写出程序源码:
declare
cursor
csr_AddSal
is
select * from emp where ENAME LIKE 'A%' OR ENAME LIKE 'S%' for update
OF SAL;
r_AddSal csr_AddSal%rowtype;
saleInfo emp.SAL%TYPE;
begin
for r_AddSal in csr_AddSal loop
dbms_output.put_line(r_AddSal.ENAME||'原来的工
资:'||r_AddSal.SAL);
saleInfo:=r_AddSal.SAL*1.1;
UPDATE emp SET SAL=saleInfo WHERE CURRENT OF csr_AddSal; dbms_output.put_line(r_AddSal.ENAME||'现在的工资:'||r_AddSal.SAL*1.1); end loop; end;
给出运行测试结果:
第 23 页 共 24 页
第 24 页 共 24 页