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