游标:
1)数据库中,游标提供了一种从表中检索出的数据进行操作的灵活手段,它实际上是一种能从包含数据记录的结果集中每次提取一条记录的机制。
2)游标总是与一条SQL选择语句相关联,因为游标是由结果集(可以是0条,1条或相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。
3)有数据缓冲的思想:游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。 先有数据基础:游标是在先从数据表中检索出数据之后才能继续灵活操作的技术。 类似于指针:游标类似于指向数据结构堆栈中的指针,用来pop出所指向的数据,并且只能每次取一个。
游标是面向集合与面向行的设计思想之间的一种桥梁。
使用场景:
主要用在循环处理、存储过程、函数中使用,用来查询结果集,就比如:我们需要从表中循环判断并得到想要的结果集,这时候使用游标操作很方便速度也很快。
分类:
隐式游标,显示游标,REF游标。其中,
隐式游标和显示游标属于静态游标(运行前将游标与SQL语句关联),
REF游标属于动态游标(运行时将游标与SQL语句关联)。
隐式游标:DML语句对应的游标,由Oracle自动管理,也称SQL游标。
显式和隐式游标的区别:
尽量使用隐式游标,避免编写附加的游标控制代码(声明,打开,获取,关闭),也不需要声明变量来保存从游标中获取的数据。
基本操作:
声明一个游标student_cursor, 用于访问数据库SCHOOL中的"学生基本信息表",
USE SCHOOL
GO
DECLARE student_cursor CURSOR
FROM SELECT * FROM 学生基本信息表
上述代码中,声明游标时,在SELECT语句中未使用WHERE子句,故此游标返回的结果集是由"学生基本信息表"中的所有记录构成的。
在select返回的行集合中,游标不允许程序对整个行集合执行相同的操作,但对每一行数据的操作不作要求。