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

来源:5-3 案例:员工涨工资问题

雲中菩提

2015-09-21 18:55

--从工资最低的员工开始,给员工涨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;
/


写回答 关注

7回答

  • w慕莱坞
    2020-05-04 21:56:08

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

  • w慕莱坞
    2020-05-04 21:12:01

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

  • w慕莱坞
    2020-05-04 21:11:02

    你这么写就会出现15个人

  • 天蝎座麦控
    2016-03-15 11:29:44

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

  • Blue__
    2016-03-07 19:47:45

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

  • smartsean
    2015-11-04 16:12:41

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

  • EL_PSY_CONGROO
    2015-10-31 11:03:19

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

Oracle数据库开发必备利器之PL/SQL基础

Oracle数据库高级开发必备的基础,通过实例带你熟练掌握

75048 学习 · 208 问题

查看课程

相似问题