PL/SQL基础编程之(六)[游标的使用]

2014-11-24 14:57:19 · 作者: · 浏览: 0
重点:游标对于大数据量是低效率的

重点:
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;
/