使用变量并不能完全满足SQL语句向应用程序输出数据的要求的,一组变量只能存放一条记录,而查询结果的记录数是不确定的,所以才有了游标的概念。
基本原理
在PL/SQL中执行select、insert、update和delete语句时,oracle会在内存中分配上下文区,即一个缓冲区。而游标就是指向该区的一个指针。
游标分为显式游标和隐式游标。
显式游标是由用户声明和操作的一种游标;
隐式游标时Oracle为所有数据操纵语句自动声明和操作的一种游标。
在每个用户会话中,可以同时打开多个游标,其数量是由数据库初始化参数文件中的OPEN CURSOR参数定义。
显式游标
1.声明游标
Cursor<游标名> is SELECT<语句>,游标必须在引用前被声明,游标可以声明在where子句中引用Pl/Sql变量,这些变量被认为是联编变量,即已经被分配空间并映射到绝对地址的变量。
2.打开游标
OPEN<游标名>
打开游标执行select语句。执行完毕后,查询结果存入内存,游标停在查询结果的首部。
当打可以一个游标时,会完成以下几件事情。
1)检查联编变量的取值
2)根据联编变量的取值,确定活动集。
3)活动集的指针指向第一行
3.提取游标
打开游标后的工作就是取值了,取值语句是fetch,用法如下:
fetch<游标名> into <变量列表>或者fetch<游标名> into pl/sql记录
fetch语句每执行一次,游标向后移动一行,直到结束(游标只能逐个向后移动,而不能跳跃移动或者向前移动)
4.关闭游标
当所有的活动集都被检索以后,游标就应该被关闭。pl/sql程序将被告知对于游标的处理已经结束,与游标相关联的资源可以被释放了。
close<有标明>,游标关闭后不能从游标取数据了,会报如下错误: