oracle游标的使用须知

重点:游标对于量是低效率的

重点:
1、 游标的属性
2、 Current of cursor 游标的当前记录

1. 游标:游标是select之后的结果集。我们可以借助游标将结果集每一条赋值到结果集中,
然后对数据进行逐条控制
2. 游标的属性解析
2.1. %FOUND : 布尔型的判断,有数据可取为true,没有则为false
2.2. %NOTFOUND:与found正好相反
2.3. %ISOPEN:判断是否已经打开游标
2.4. ROWCOUNT:判断游标内的数据有多少条

1、游标应用的案例
declare
cursor mycur is select * from dept; –定义游标
myrec dept%rowtype; –定义复合变量
begin
open mycur; –打开游标,拿出来
fetch mycur into myrec; –将游标赋值给变量
while mycur%found loop –用游标的%found属性返回布尔值判断做循环输出
dbms_output.put_line(‘myrec.did'||myrec.did);
dbms_output.put_line(‘myrec.dname'||myrec.dname);
fetch mycur into myrec; –循环体内输出
end loop;
end;
/

2、游标传参的案例
declare
cursor mycur(id varchar2) is –定义游标
select dname from dept where did=id; –这里的ID应用的是游标里面定义的ID
name dept.dname%type; –定义存储结果的变量
begin
open mycur('01'); –打开游标,相当于把参数传递进去了
fetch mycur into name; –将游标的值赋给变量
dbms_output.put_line(name);
if mycur%isopen then –游标的属性isopen的应用
dbms_output.put_line(‘游标已经打开');
end if;
end;
/

3、current of mycur的应用,判断到游标所在的当前行。并且用游标更新数据
declare
cursor mycur is
select dname from dept for update; –这里加上for update是锁定用来更新数据的游标。
name dept.dname%type;
begin
open mycur;
fetch mycur into name;
while mycur%found loop –条件while loop
dbms_output.put_line(‘aaa');
update dept set dname='部门aa' where CURRENT of mycur;
–关键所在,运用了current of mycur做where条件意思是说。判断游标所在的当前行
fetch mycur into name;
end loop;
close mycur;
end;
/

重:隐士游标不需要声明不需要打开和关闭
隐士游标的案例:
begin
for cur in(select dname from dept) loop
dbms_output.put_line(cur.dname);
end loop;
end;
/

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《oracle游标的使用须知
本文地址:https://www.zhiletu.com/archives-311.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微