PL/SQL高级应用的学习1

来源:互联网 发布:知乎专栏怎么写文章 编辑:程序博客网 时间:2024/04/30 22:27

游标

l        什么是游标

游标是一种PL/SQL的控制结构:可以对SQL语句的处理进行现式控制,便于对表的行数据逐条进行处理。

l        游标分类

显示、隐式

l        游标的属性

%FOUND

       %ISOPEN

       %NOTFOUND

       %ROWCOUNT

游标的简单使用举例:

DECLARE

CURSOR mycur IS   --申请一个内存区域,存放RESULT

SELECT * FROM PERSON;

myrecord person%rowtype;       --声明一个记录,结构通person表。

begin

open mycur;                              --打开结果集

fetch mycur into myrecord;  --将结果集中的当前游标所在的那条数据存放

                                                        myrecord

while mycur%found loop            --%found判断,如果没有读取完,则执行循环

dbms_output.put_line(myrecord.id||','||myrecord.name);

fetch mycur into myrecord;

end loop;

close mycur;                              --关闭结果集

end;

/

带参数的游标使用举例:

declare

cursor cur_para(myId varchar2) is --声明参数,指定类型即可。

select name from person where id=myId;

t_name person.name%type;

begin

open cur_para('1');             --写入游标参数

loop

fetch cur_para into t_name;

exit when cur_para%notfound;

dbms_output.put_line(t_name);

end loop;

close cur_para;

end;

/

使用FOR的带参数的游标:

declare

cursor cur(mid varchar2) is        --显示声明游标

select name from person where id=mid;

begin

dbms_output.put_line('*******结果集为:**********');

for i in cur('1') loop

dbms_output.put_line(i.name);

end loop;

end;

/

游标%ISOPEN使用举例:

declare

tname person.name%type;

cursor cur(cid varchar) is

select name from person where id = cid;

begin

if cur%isopen then

dbms_output.put_line('游标被打开!');

else

open cur('1');

fetch cur into tname;

close cur;

end if;

dbms_output.put_line('游标已经被关闭'||tname);

end;

/

使用游标更新数据:

declare

cursor cur is

select name from person for update; --只有for update才能更新

text varchar2(10);

begin

open cur;

fetch cur into text;

while cur%found loop

update person set name = name||'_t' where CURRENT OF CUR;--获取当前行

fetch cur into text;

end loop;

close cur;

end;

/

 

 

隐式游标

begin

for cur in(select aid from a) loop

dbms_output.put_line(cur.aid);

end loop;

end;

/

原创粉丝点击