- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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_statementFOR 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循环时
您可能关注的文档
最近下载
- 奶茶店兼职劳务合同模板(3篇).docx
- OTIS奥的斯XIOTIS西子奥的斯标准ACD4MR电气原理图XAA21310AT注解版.pdf
- 健康体重课件小学生版最新完整版本.pptx VIP
- 内分泌性高血压筛查专家共识(2025版).pdf VIP
- 高级教师职称面试讲课答辩题目及答案(分五类共60题).docx VIP
- 全国智能制造应用技术技能大赛理论知识题库资料(核心500题).pdf VIP
- 安全生产台账建立与完善策略.docx VIP
- 矿山井巷施工施工组织设计 (1).pdf VIP
- CRM坐席操作手册.pdf VIP
- 2025年新高考物理压轴题专项训练09 电磁感应中的单双棒问题 含解析 .docx VIP
文档评论(0)