oracle学习之PLSQL(2)--游标使用(摘)
[size=medium]游标
环境区域是用来处理SQL语句的一个oracle存储区域。游标是指向它的指针或句柄。通过游标,PL/SQL程序可以控制这个环境区域中被处理的语句。
Oracle中的游标有两种:显式游标、隐式游标。
显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。
1、显式游标操作
显式游标在块定义部分、包或子程序中声明。当声明了显式游标后,可以通过以下三条命令控制显式游标的操作:打开游标、推进游标、关闭游标。
(1)声明显式游标
--例1
set serveroutput on size 100000 --设置存储缓冲区大小。 declare /*定义游标变更类型t_curref,该游标变量类型没有指定结果集类型,所以该游标变量类型的变量可以返回不同的PL/SQL记录类型。*/ type t_curref is ref cursor; --声明一个游标变量类型的变量 c_cursorref t_curref; --定义PL/SQL记录类型t_authorrec,该类型的变量用来接收游标变量的返回值。 type t_authorrec is record( authorcode auths.author_code%type, name auths.name%type); --定义PL/SQL记录类型t_articlerec,该类型的变量也用来接收游标变量的返回值。 type t_articlerec is record( authorcode article.author_code%type, title artitle.title%type); --声明两个记录类型变量。 v_author t_authorrec; v_article t_articlerec; begin --打开游标变量c_cursorref,返回t_authorrec类型的记录。 open c_cursorref for select author_code,name from auths where author_code in('A00001','A00002','A00003','A00004','A00005'); --推进游标变量 fetch c_cursorref into v_author; --游标变量的推进循环。 while c_cursorref%found loop --将作家代码和相应的作家名字输出到屏幕上。 dbms_output.put(v_author.authorcode||':'||v_author.name||' '); fetch c_cursorref into v_author; end loop; dbms_output.new_line;--向屏幕上输出一个回车行。 --关闭游标变量,仅仅将游标变量指定的资源释放掉,游标变量本身的存储空间没有释放掉。 close c_cursorref; --再次打开游标变量,返回t_articlerec类型的记录。 open c_cursorref for select author_code,title from article where author_code in('A00001','A00002','A00003','A00004','A00005'); fetch c_cursorref into v_article; while c_cursorref%found loop ... end loop; close c_cursorref; end;