首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

oracle学习之PLSQL(二)-游标使用(摘)

2012-08-27 
oracle学习之PLSQL(2)--游标使用(摘)[sizemedium]游标 环境区域是用来处理SQL语句的一个oracle存储区域。

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;  

注意,在上例中,第一次关闭游标变量是可省略的,因为在第二次打开游标变量时,就将第一次的查询丢失掉了。而且游标变量也有游标属性,通常在推进游标变量时使用这些游标属性,例如上例使用了%found属性。[/size]

热点排行
Bad Request.