ORACLE游标详解 文章目录 一、概述二、显示游标1、声明游标2、打开游标3、读取游标4、关闭游标 三、隐式游标四、游标的属性1、%FOUND(是否找到游标)2、%NOTFOUND(是否没找到游标)3、%ROWCOUNT(游标行数)4、%ISOPEN(游标是否打开)5、参数化游标 五、游标变量1、声明游标变量2、打开游标变量3、关闭游标变量 六、通过for循环遍历游标 前言:本文为本人学习笔记,所用到的例子均来自oracle11g自带的scott模式,参考书籍清华大学出版社Oracle从入门到精通,还请大家支持购买正版书籍,话不多说,直接开始! 一、概述 什么是游标 游标提供了一种从表中检索数据并进行操作的灵活手段处理客服端发送到服务器端的sql语句,或者是批处理、存储过程、触发器中的数据处理请求 游标的作用 通过游标PL/SQL程序可以一次处理查询结果集其中的一行,对该数据进行特定操作 基本原理 PL/SQL块在执行SELECT、INSERT、UPDATE、DELETE语句时,Oracle会在内存中为其分配上下文区(缓冲区),游标是指向该区的一个指针。游标为应用程序提供了一种具有对多行数据查询结果集中的每一行数据分班进行单独处理的方法游标分显示游标、隐式游标、REF游标 二、显示游标 显示游标是用户声明和操作的一种游标,通常用于操作查询结果集(SELECT语句返回的查询结果)使用显示游标处理数据的步骤:声明游标、打开游标、读取游标、关闭游标读取游标操作每次只能读取一行数据,对于多条记录需要反复读取直到读取不到为之,可使用for循环遍历声明游标需要在声明部分进行,其他在执行或异常处理部分进行 1、声明游标 示例:声明游标读取emp表中job=’SALEMAN’的职员 2、打开游标 示例:用上面声明的游标查找job=’MANAGER’的人 3、读取游标 游标中包含一个数据行指针用来指向当前数据行打开游标时指针指向第一行,使用 FETCH … INTO 语句后指向下一行指针指到最后一条记录为止(实际上指针最后一条记录之后是不存在的,为空,这里只是表示遍历完所有数据),此时游标的%FOUND属性值为FALSE 示例:声明一个检索emp表的游标,搜索职务为 MANAGER 的员工信息,使用 FETCH…INTO 语句和 WHILE 语句来读取游标中所有员工信息,最后输出读取到的信息 使用while之前,先试用 FETCH … INTO 将游标指针指向第一行,保证 %FOUND 值为true,从而保证循环条件成立。 4、关闭游标 关闭游标后,系统会释放被占用的内存 三、隐式游标 执行一个SQL语句时,系统会自动创建一个隐式游标隐式游标主要用来处理数据操作语句(如UPDATE、DELETE等)隐式游标也有属性,因此在使用隐式游标的属性时,需要在属性前加上隐式游标的默认名称 – SQL实际开发中,常使用隐式游标来判断更新数据行或删除数据行的情况 示例:吧emp表中的 SALESMAN 的工资上调20%,然后使用隐式游标的sql的%ROWCOUNT属性输出上调工资的员工数量 四、游标的属性 游标属性只能用在PL/SQL的流程控制语句内,而不能用在SQL语句内显示游标与隐式游标都具有以下四个属性,通过这些属性可以获知SQL语句的执行结果以及该游标的状态信息 1、%FOUND(是否找到游标) 表示当前游标是否指向有效一行,是 -> true ; 否 -> false在隐式游标中%FOUND属性的引用方法是SQL %FOUND 示例: 2、%NOTFOUND(是否没找到游标) 与%FOUND相反 3、%ROWCOUNT(游标行数) 记录了游标抽取过的记录行数,也可以理解为当前游标所在的行号 示例: 4、%ISOPEN(游标是否打开) 示例: 5、参数化游标 定义游标时带上参数,使得在使用游标时根据参数不同所选中的数据行也不同,达到动态使用的目的 示例:声明一个游标检索指定员工的信息. 五、游标变量 游标变量是动态的,可以在运行时与不同的语句相关联被用于处理多行的查询结果集不同于特定的查询绑定,游标变量在打开游标时才能确定对于的查询 1、声明游标变量 游标变量是一种引用类型,程序运行时可以指向不同的存储单游标变量的返回类型必须是一个记录类型 定义一个游标变量的完整语法 2、打开游标变量 如果游标变量是受限的,则SELECT语句返回的类型必须与游标变量所受限的记录类型匹配 3、关闭游标变量 与关闭静态游标类似,均使用close语句直接关闭,释放查询所使用的内存空间关闭已关闭的游标是非法的 六、通过for循环遍历游标 使用游标处理结果集时,可以配合使用FOR语句来完成使用FOR语句遍历游标中的数据时,可以把它的计时器看做一个自动的RECORD类型变量 (1)FOR语句遍历隐式游标中的数据时,通常在关键字 IN 后面提供由 SELECT 查询出的结果集,在检索结果集的过程中,ORACL 会自动提供一个隐式的游标SQL。 示例:使用隐式游标查询除JOB为 SALESMAN 的员工并输出 (2)使用显示游标时,IN 关键字后面提供游标名称 示例:检索emp表部门编号为30的员工并输出
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/60806.html