游标(Cursor)是用户从查询记录集中逐条逐行地访问(移动读取、修改或删除)记录的数据处理机制。
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。主语言是面向记录的,一组主变量一次只能存放一条记录。
步骤
声明、打开、使用(移动读取、删除、修改)、关闭、释放 5步
类型
(1)静态(Static):只能看到open时的记录内容。
(2)动态(Dynamic):随时能看到当前的记录内容,
包括别人所做的修改。
(3)只进(Forward Only):
只能从前往后一条一条移动记录指针。
(4)滚动(Scroll):
向前、向后,一条或多条移动记录指针。
声明游标(1)
declare 游标名 cursor
[local | global]
[forward_only | scroll]
[static | keyset | dynamic | fast_forward]
[read_only | scroll_locks | optimistic]
for select语句
[for update [of 列名 [,...n]]]
Ø 游标名:游标命名必须符合标识符规则,不能超过30 个字符。
Ø select语句:定义结果集的标准select语句,且不许用compute、compute by、for browse和into子句。
Ø local:游标的作用域是局部的[创建它的批处理、存储过程或触发器]。
Ø global:游标的作用域是全局的。在由连接执行的任何存储过程或批处理中,都可以引用该游标名称。该游标仅在连接断开时自动释放。
Ø forward_only 只进。仅支持next。
Ø Scroll 滚动 支持:next、prior、first、last、absolute、relative
Ø static 静态 open时在tempdb创建临时表复本保存结果集。只提取,不许修改
Ø dynamic 动态 记录值、顺序等在每次提取时都可能因其他用户的更改而变动。不支持 absolute 提取选项。
Ø keyset 键集 open时在tempdb创建keyset表,记录结果集中每条记录的关键字段值和顺序。
Ø fast_forward 快速向前 优化的 forward_only、read_only.与scroll、for_update、 forward_only互斥
Ø read_only 只读 在 update 或 delete 语句的 where current of 子句中不能引用游标
Ø scroll_locks 滚动锁定 当滚动记录指针提取当前记录时,系统将会锁定该行,确保游标更新或删除的成功
Ø Optimistic 乐观 行自从被读入游标以来,如果已修改该行,尝试进行的更新或删除将失败
Ø for update [of 列,...]]更新 指定可更新的列。默认所有列