使用SQL游标.docVIP

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

游标 在Oracle9i之前,使用FETCH语句每次只能提取一行数据;从Oracle9i开始,通过使用FETCH…BULK COLLECT INTO语句,每次可以提取多行数据。语法如下: (1)? ? ? ? FETCH cursor_name INTO variable1,variable2,…; 此方法必须要使用循环语句处理结果集的所有数据。 (2)? ? ? ? FETCH cursor_name BULK COLLECT INTO collect1,collect2,…[LIMIT rows] ? ?? ?? ? [LIMIT rows]可用来限制每次游标每次提取的行数。 基于游标定义记录变量 使用%ROWTYPE属性不紧可以基于表和视图定义记录变量,也可以基于游标定义记录变量。当基于游标定义记录变量时,记录成员名实际就是SELECT语句的列名和列别名。为了简化显示游标的数据处理,建議开发人员使用记录变量存放游标数据。 For example: DECLARE ? ?CURSOR emp_cursor IS SELECT ename,sal FROM emp; ? ?emp_reocrd emp_cursor%ROWTYPE; BEGIN ? ?OPEN emp_cursor; ? ?LOOP ? ?? ?FETCH emp_cursor INTO emp_record; ? ?? ?EXIT WHEN emp_record%NOTFOUND; ? ?? ?dbms_ouput.put_line(‘雇员名:’||emp_record.ename||’,雇员工资:’||emp_record.sal); ? ?END LOOP; ? ?CLOSE emp_cursor; END; 参数游标 Defined: CURSOR cursor_name(parameter_name datatype) IS select_statement; 在定义参数游标时,游标参数只能指定数据类型,而不能指定长度.另外,定义参数游标时,一定要在游标子查询的WHERE子句中引用该参数,否则失去了定义参数游标的意义. For example: CURSOR emp_cursor(no number) IS SELECT ename FROM emp WHERE deptno=no; 当使用显示游标属性时,必须要在显式游标属性之前带有显式游标名作为前缀(游标名.属性名).(属性主要指:%FOUND,NOTFOUND,%ROWCOUNT,%ISOPEN) 使用游标更新或者删除数据 Syntax: CUROSR cursor_name(parameter_name datatype) IS select_statement FOR UPDATE[OF column_reference] [NOWAIT]; FOR UPDATE 子句用于在游标结果集数据上加行共享锁,以防止其它用户在相应行上执行DML操作;当SELECT 语句引用到多张表时,使用OF子句可以确定哪些表(或者是哪些表里的哪些字段)要加锁,如果没有OF子句,则会在SELECT语句所引用的全部表上加锁。 NOWAIT子句用于指定不等待锁。使用FOR UPDATE 语句对被作用行加锁,如果其它会话已经在被作用行上加锁,那么在默认情况下当前会话要一直等待对方释放锁。通过在FOR UPDATE子句指定NOWAIT子句,可以避免等待锁。当指定NOWAIT子句拉,如果其它会话已经在被作用行加锁,那么当前会话会显示错误提示信息,并退出PL/SQL块。 在提取了游标数据之后,为了更新或者删除当前游标数据,必须在UPDATE或DELETE语句中引用WHERE CURRENT OF 子句。语法如下: UPDATE table_name SET column=.. WHERE CURRENT OF cursor_name; DELETE table_name WHERE CURRENT OF cursor_name; 游标FOR循环 游标FOR循环简化了对游标的处理,当使用游标FOR循环时,Oracle会隐含地打开游标、提取游标数据并关闭游标。为了简化程序代码,建议大家使用游标FOR循环。语法如下: ? ?? ?? ?? ? FOR record_name IN cursor_name??LOOP ? ?? ?? ?? ? Statement1; ? ?? ?? ?? ? Statement2; ? ?? ?? ?? ? … ? ?? ?? ?? ? END LOOP; record_name是Oracle隐含定义的记录变量名(不用在定义部分定义,直接使用即可)。 如果在使用游标FOR循环时

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档