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

无法输出原因:

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值