什么是游标
结果集,结果集就是select 查询之后返回的所有行数据的集合。
一个sql 语句就会对应到一个游标。
游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。
一般复杂的存储过程,都会有游标的出现,他的用处主要有:
定位到结果集中的某一行。
对当前位置的数据进行读写。
可以对结果集中的数据单独操作,而不是整行执行相同的操作。
是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。
由程序接口调用创建一个游标(cursor)。任何SQL 语句都会创建它,特别在运行DML语句时,都是自动创建游标的,不需要开发人员干预。多数应用中,游标的创建是自动的。然而,在预编译程序(pro*c)中游标的创建,可能是隐含的,也可能显式的创建。在存储过程中也是这样的。
游标的生命周期
游标的生命周期包含有五个阶段9 个步骤:声明游标、打开游标、读取游标数据、关闭游标、释放游标
游标的生命周期:
一:声明游标
1、声明游标(人为)-- 游标通常是指显式游标,如是什么类
二:打开游标
2,打开游标-- open cursor,此步骤在UGA 里申请一块内存给游标使用,这个时候游标还没有与sql 语句关联。
3,解析游标-- sql 与游标关联起来,解析sql 的内容(包括执行计划),解析后的内容会被加载到共享池中(share pool-- library cache)
4,定义输出变量-- 如果sql 语句返回数据,必须先定义接收数据的变量。这一点不仅对查询语句很重要,而且对经常要用到的delete、insert 和update 语句也很重要。
5,绑定输入变量-- 如果sql 语句使用了绑定变量,必须提供他们的值。绑定的过程是不做什么检查。如果指定了无效的数据,执行的过程中会出一个运行时错误。
三、读取游标数据
6,执行游标-- 执行跟游标关联的sql。注意数据库并非总是在这一步做重要的事情。事实上,对于很多类型的查询语句来说,真正的处理过程通常会被推迟到提取(fetch)数据阶段。
7,获取游标-- 如果sql 语句返回数据,这一步会接受这些数据。特别是在查询语句中,大部分的处理工作都是在这一步进行的。在查询语句中,可能只会读取部分记录,换句话讲,游标有可能在取到所有记录前被关闭。
四、关闭游标
8,关闭游标-- 释放UGA 中与这个游标有关的资源,从而这些资源可供其他的游标使用。在library cache 中的share cursor 不会被清除,它会继续保留在library cache中,等待被重用(软解析重用)。
五、释放游标
9.释放游标(人为)
此时要释放一个游标,在关闭游标后,还必须做commit 或rollback;此外,还要设置release_cursor 选项为yes , 设置方法是在proc 命令行中增加release_cursor=yes,




