为了账号安全,请及时绑定邮箱和手机立即绑定

案例难度太低,,改良后代码

--从工资最低的员工开始,给员工涨10%的工资,但工资总额不能超过5W元,并输出工资总额与涨工资员工人数

declare

  --定义光标
  cursor cemp is select empno,sal from emp order by sal;
  pempno emp.empno%type;  --员工工号
  psal emp.sal%type;  --员工工资
 
   --涨工资员工人数
  pnum number :=0; 
  --当前工资总额
  psumsal number; 
  
  begin
  --当前工资总额
  select sum(sal) into psumsal from emp;
  
  --打开光标
  open cemp;
  
  loop 
  
    --取出一条数据
    fetch cemp into pempno,psal;
    --结束条件:cemp已空 或 工资总额(当前工资总额+当前需涨金额)超过5W
    exit when cemp%notfound or (psumsal+ psal*0.1)>50000;
    
    --更新数据库,涨10%工资
    update emp set sal=sal*1.1 where empno=pempno;
    
    --更新涨工资员工人数
    pnum := pnum+1;
    --更新当前工资总额
    psumsal := psumsal+psal*0.1;
    
  end loop;
  
  --关闭光标
  close cemp;
  
  --提交更改
  commit;
  
  --输出结果
  dbms_output.put_line('工资总额:'||psumsal);
  dbms_output.put_line('涨工资员工人数:'||pnum);
  
  end;
/


正在回答

8 回答

就是将一段可能会报错的代码写入,进行测试,这样理解试试;具体每一步代码的内容已经解释的很详尽,不多说了。

oecqdu

0 回复 有任何疑惑可以回复我~

看错了,哈哈,fetch看成下面了,楼主这个最优

0 回复 有任何疑惑可以回复我~

推出条件还是要分开写,exit when cemp%notfound;还是要写在fetch后

0 回复 有任何疑惑可以回复我~

你这么写就会出现15个人

0 回复 有任何疑惑可以回复我~

把那个exit when 的条件改为楼主所给出的条件,就可以实现想要的结果了

0 回复 有任何疑惑可以回复我~

exit when (salTotal + psal*0.1) > 50000;

0 回复 有任何疑惑可以回复我~

exit when (salTotal + psal*1.1) > 50000;

0 回复 有任何疑惑可以回复我~

请问这样设计之后,结果应该还是会超过5W吧?

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

案例难度太低,,改良后代码

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信