修改后的 答案!
/*
SQL語言 ?
select empno,sal from emp order by sal
--> 光標 --> 循環 ?--> 退出條件:1. 總額>5w 2.notfound漲完
變量
漲工資的人數: countEmp number := 0;
漲后的工資總額:salTotal number;
? ? ? ? ? ? ? 1. select sum(sal) into salTotal from emp;
? ? ? ? ? ? ? 2. 漲后=漲前+sal*0.1
? ? ? ? ? ? ??
練習:把程序改對 ? ? ? ? ? ? ?
*/
set serveroutput on
declare
? cursor cemp is select empno,sal from emp order by sal;
? pempno emp.empno%type;
? psal ? emp.sal%type;
? --漲工資的人數:?
? countEmp number := 0;
? --漲后的工資總額:
? salTotal number;
? tal ? ? ?number;
begin
? --得到初始的工資總額
? select sum(sal) into salTotal from emp;
??
? open cemp;
? loop
? ? --1. 總額>5w
? ? exit when salTotal > 50000;
? ? --取一個員工
? ? fetch cemp into pempno,psal;
? ? --2.notfound漲完
? ? exit when cemp%notfound;
? ? ?tal:=salTotal + psal *0.1;?
? ? ?exit when tal>50000; --在漲工資之前判斷一下,漲后是否超過5W
? ?--漲工資
? ? update emp set sal=sal*1.1 where empno=pempno;
??
? ? --人數+1
? ? countEmp := countEmp +1;
? ? --2. 漲后=漲前+sal*0.1
? ? salTotal := salTotal + psal *0.1;
??
? end loop;
? close cemp;
? commit;
? dbms_output.put_line('人數:'||countEmp||' ? 工資總額:'||salTotal);
end;
/
2017-10-03
你覺得加一個在漲工資前的判斷,就可以不出現老師的問題了嗎?答案很顯然是把員工的?信息循環完一遍之后工資依然沒有漲到5w,此時程序就退出了。正確的思路是,讓程序再把所有員工信息循環一遍。你們到底自己試了沒有?
2016-01-22
tal number:=0;
2015-11-04
在update前面加上 exit when (salTotal + psal*1.1) > 50000;