/*
为员工长工资。从最低工资调起每人长10%,但工资总额不能超过50万元,
请计算长工资的人数和长工资后的工资总额,并输出输出长工资人数及工资总额。
先写出可能用到的sql语句
select empno,sal from emp order by sal;
select sum(sal) from emp;
*/
set serveroutput on --使用set serveroutput on 命令设置环境变量serveroutput为打开状态,从而使得pl/sql程序能够在SQL*plus中
--输出结果
--使用函数dbms_output.put_line()可以输出参数的值
declare --声明变量
cursor c1 is select empno,sal from emp order by sal;
salTotal NUMBER; --记录工资总额
empCount NUMBER := 0; --涨工资的人数
pempno emp.empno% TYPE; --记录员工的编号
psal emp.sal%type; --记录员工的工资
begin
--得到当前总工资
select sum(sal) into salTotal from emp;
--打开游标
open c1; ---执行查询结果写到c1
--执行循环
while salTotal <= 50000
loop
fetch c1 into pempno, psal;--取出一条记录
exit when c1%notfound; --表示游标的值是否循环取完了
update emp set sal = sal * 1.1 where empno = pempno; --执行加薪
--记录涨工资后的总额
salTotal := salTotal + psal*0.1;
--记录涨工资的人数
empCount := empCount + 1;
end loop;
close c1;
commit;
dbms_output.put_line('涨工资人数:' || empCount || ' 工资总额:' || salTotal);
end;
/