利用oracle的游标为员工涨工资,从最低工资涨起每人涨10%,但工资总额不能超过5万元

--为员工涨工资,从最低工资涨起每人涨10%,但工资总额不能超过5万元,
--请计算涨工资的人数和涨工资后的工资总额,并输出涨工资人数及工资总额
--sql语句
--select empno,sal from emp order by sal;
--光标--循环--退出条件(1、工资总额大于5万;2、%notfound)
--变量:1、初始值 2、如何得到
--涨工资的人数:countEmp number:=0;
--涨后的工资总额:salTotal number;
--1、select sum(sal) into salTotal from emp;
--2、涨后的工资总额=涨前的工资总额+sal*0.1;
--select sum(sal) from emp;//得到初始的总工资
declare 
    --定义光标
    cursor cemp is select empno,sal from emp order by sal;
    pempno emp.empno%type;
    psal emp.sal%type;
    --涨工资的人数(初始值为0)
    countEmp number=0;
    --涨后的工资总额(注意初始值不为0)
    salTotal number;
begin
  --注意:我们能不操作数据库就不要操作数据库
  --得到工资总额的初始值
  select sum(sal) into salTotal from emp;
  
  --打开光标
  open cemp;
  
  --loop循环
  loop
    --1、工资总额>5w
    exit when salTotal>50000;
    --取一个员工涨工资
    fetch cemp into pempno,psal;
    --2、%notfound
    exit when cemp%notfound;
    
    --涨工资
    update emp set =sal*1.1 where empno=pempno;
    --如果涨后的工资大于50000就直接退出
    exit when salTotal>50000;
    --人数+1
    countEmp:=countEmp+1;
    --2、涨后的工资总额=涨前的工资总额+sal*0.1
    salTotal:=salTotal+psal*0.1;
  end loop;
  --关闭光标
  close cemp;
  
  --因为上面有update,所以要commit提交
  commit;
  --打印输出涨工资的人数和工资总额
  dbms_output.put_line('涨工资的人数'||countEmp||',涨工资后的总额:'||salTotal);
end;
/ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝地反击T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值