oracle 游标的理解

①游标的状态是通过属性来表示。
  %Found :Fetch语句(获取记录)执行情况True or False。--是否指向有效行。
  %NotFound : 最后一条记录是否提取出True or False。
  %ISOpen : 游标是否打开True or False。
  %RowCount :游标当前提取的行数 。

所谓游标就是有没有一个箭头指向一条记录(自己得理解),


declare
cursor c is select * from emp;
v_b emp%rowtype;
begin
open c;
loop
fetch c into v_b;
exit when c%notfound;
p(v_b.ename||'liyang');
end loop;
close c;
end;

declare
cursor c is select * from emp;
v_b emp%rowtype;
p//是为了方便简写定义的一个存储过程就是dbms_outpue.putline的意思
begin
open c;
loop
fetch c into v_b;
p(v_b.ename||'liyang');

exit when c%notfound;
end loop;
close c;
end;

理解:上面这2个结果是不一样的,%notfound是指游标当前指向记录是否有数据,%found是指游标当前指向是否有数据,

为什么后面一个要多输出一个呢,是最后一步抓取的时候没抓取成功,v_b还是上一条记录的数据,所以会多输出一次。

SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。

begin
update emp set ENAME='ALEARK' WHERE EMPNO=7469;
if sql%isopen then
dbms_output.put_line('Openging');
else
dbms_output.put_line('closing');
end if;
if sql%found then
dbms_output.put_line('游标指向了有效行');--判断游标是否指向有效行
else
dbms_output.put_line('Sorry');
end if;
if sql%notfound then
dbms_output.put_line('Also Sorry');
else
dbms_output.put_line('Haha');
end if;
dbms_output.put_line(sql%rowcount);
exception
when no_data_found then
dbms_output.put_line('Sorry No data');
when too_many_rows then
dbms_output.put_line('Too Many rows');
end;

1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
原文地址:https://www.cnblogs.com/liyang31tg/p/3446104.html