无法输出原因:
1.Loop循环不满足条件,不进入循环,所以循环中的输出语句不输出内容
2.dbms_output.put() 这个函数输出内容后,没有显示在屏幕上,需要使用dbms_output.putline()来输出内容
3.在输出变量前面加上字符串,能清楚的看到输出的内容
例子:
create or replace procedure emp_sals is
cursor c1 is
select empno, sal from emp order by sal for update;
emp_num integer :=0; --保存涨工资的职工计数
s_sal number(6); --保存工资总额
e_eno emp.empno%TYPE; --保存正在处理的员工编号
e_sal emp.sal%TYPE; --保存正在处理的员工工资
stat_num integer :=0; --统计一条SQL语句处理了多少条记录
results boolean;
begin
open c1;
select sum(sal) into s_sal from emp; --将没有涨工资之前的工资总和保存在s_sal中
dbms_output.put_line('start sal is: '||s_sal); --可以输出
while s_sal < 50000.00
loop
fetch c1 into e_eno, e_sal; --从光标中读取一个员工的empno 和 sal
exit when c1%NOTFOUND; --如果没有找到记录,退出循环
update emp set sal = sal*1.1
where empno=e_eno; --涨当前员工的工资
s_sal := s_sal + e_sal*0.1; --将涨工资的部分增加到总数中
emp_num := emp_num + 1; --员工计数器加1
stat_num := SQL%ROWCOUNT; --统计一条SQL语句处理了多少条记录
results := SQL%NOTFOUND;
dbms_output.put_line('empno:'||emp_num||' each time: '||s_sal); --这个为什么无法输出结果:循环不满足条件时,就不会进入循环体,所以不输出
end loop;
dbms_output.put_line('results_counts :'||stat_num); --也没有起作用:没有定义字符串
--insert into msg values(emp_num, s_sal); --将涨工资人数及当前工资总额两个统计数据输出
dbms_output.put_line(emp_num||' end sal is:'||s_sal); --这个为什么无法输出结果:使用put输出后,不显示
dbms_output.put_line('results_counts2:'||stat_num); --也没有起作用:使用put输出后,不显示
close c1;
commit;
end emp_sals;