oracle游标变量和隐藏游标.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
oracle游标变量和隐藏游标

游标变量和隐藏游标 SQL%FOUND 指明insert ,update或delete是否影响到行 SQL%ISOPEN 指明游标是否打开,这个值在隐式游标中永远为false,因为隐式游标在DML语句执行后自动关闭 SQL%NOTFOUND? 表示DML语句在修改行的是候是否失败了 SQL%ROWCOUNT 指明DML语句影响到的行数 游标变量就是一个PL/SQL变量,你可以在运行时针对不同的查询使用该变量同一游标变量能指行不同的工作区 游标变量的定义包括两个步骤: 1 定义CURSOR类型的指针 ? 在pl/SQL中,使用下面语法定义CURSOR类型的指针 ? ref type ? 如 ? TYPE rc IS REF CURSOR 2 定义REF CURSOR 类型的变量 ? v_rc rc ? 完整的声明游标变量方法如下: ? type rc is ref cursor; ? v_rc rc; 这样定义的游标类型叫弱类ref curosr 类型 ,这是因为没指明游标的返回类型,因此它能指向任何一个具有任意多列的select 查询。 定义带有返回类型的强ref cursor 类型 type ref_type_name is ref cursor return return_type; 如 type rc is ref cursor return hrc_tab%rowtype; v_rc rc; 游标变量的使用 ?1) 分配内存 ?2) 为查询打开游标变量 ?3) 把结果取到pl/sql记录中 ?4) 关闭游标变量 1 分配内存 ?? 在pl/sql中声明游标变量后,pl/sql引擎会自动为期分配存储数据行的内存空间 2 打开游标 ? open?? 游标变量名 fro select_query 3 把结果取到pl/sql记录或单独pl/sql变量中? fetch cursor_variable_name into var1,var2 或 ?fetch?? cursor_variable_name into table_name%rowtype; 4 关闭游标变量 ? close? cursor_variable_name 一个例子 declare ?type rc is ref cursor ; ?v_rc rc; ?v_rc2 rc; ?hrc_rec hrc_tab%rowtype; begin ? open v_rc for select * form hrc_tab; ? v_rc2:=vrc; loop ? fetch v_rc into hrc_rec; ? exit when v_rc%nofound; ? dbms_output.put_line(); end loop;? close v_rc;? end; 注意:当关闭v_rc的同时也会关闭v_rc2,反之亦然。为一个游标变量简单的赋上一个已经打开的游标变量值,实际上是一个游标指向另一个工作区。不要把一个没打开的游标变量赋值给另一个游标变量,那样会出现invalid_cursor错误 游标变量也有4个属性curosr_variable_name%ISOPEN,curosr_variable_name%FOUND,curosr_variable_name%NOTFOUND,curosr_variable_name%ROWCOUNT 使用的办法和普通游标一样。 游标的高级功能 使用游标变量真正的好处是必须使用同一个游标变量打开多个查询,或根据运行时的条件需要动态的把不同的 查询赋给相同的游标变量时体现。 使用同一游标变理打开多个查询 ?declare ?type rc is ref cursor ; ?v_rc rc; ?v_rc2 rc; ?hrc_rec hrc_tab%rowtype; begin ? open v_rc for select * form hrc_tab; ? v_rc2:=vrc; loop ? fetch v_rc into hrc_rec; ? exit when v_rc%nofound; ? dbms_output.put_line(); end loop;? ?open v_rc for select * from hrc_tab where class_id=55; loop ? fetch v_rc into hrc_rec; ? exit when v_rc%nofound; ? dbms_output.put_line(); end loop;? close v_rc;? end; 两个地方值得注意: ?同一游标变量v_rc指向两个不同的查询 ?第一个查询打开v_rc并取得值后,v_rc并没有立即关

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档