ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库:Oracle光标例子可以输出,修正

数据库:Oracle光标例子可以输出,修正

原创 Linux操作系统 作者:果果的空间 时间:2013-08-14 10:28:12 0 删除 编辑
无法输出原因:
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;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29056818/viewspace-768447/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-07-18

  • 博文量
    60
  • 访问量
    117477