游标使用步骤(包括定义及参数含义)

游标使用步骤:

(1)游标定义及参数含义:(具体见博客园)

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]

[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

[ TYPE_WARNING ]

FOR select_statement

[ FOR UPDA TE [ OF column_name [ ,...n ] ] ]

[;]

LOCAL 和GLOBAL 二选一

LOCAL 意味着游标的生存周期只在批处理或函数或存储过程中可见,而GLOBAL 意味着游标对于特定连接作为上下文

FORW ARD_ONLY 和 SCROLL 二选一

FORWARD_ONLY意味着游标只能从数据集开始向数据集结束的方向读取,FETCH NEXT是唯一的选项,而SCROLL 支持游标在定义的数据集中向任何方向,或任何位置移动

STA TIC KEYSET DYNAMIC 和 FAST_FORWARD 四选一

这四个关键字是游标所在数据集所反应的表内数据和游标读取出的数据的关系

STATIC 意味着,当游标被建立时,将会创建FOR 后面的SELECT 语句所包含数据集的副本存入tempdb 数据库中,任何对于底层表内数据的更改不会影响到游标的内容.

DYNAMIC 是和STATIC 完全相反的选项, 当底层数据库更改时,游标的内容也随之得到反映,在下一次fetch 中,数据内容会随之改变

KEYSET 可以理解为介于STATIC 和DYNAMIC 的折中方案。将游标所在结果集的唯一能确定每一行的主键存入tempdb, 当结果集中任何行改变或者删除时,@@FETCH_STATUS会为-2,KEYSET 无法探测新加入的数据

FAST_FORWARD可以理解成FORWARD_ONLY的优化版本.FORWARD_ONLY执行的是静态计划,而FAST_FORWARD是根据情况进行选择采用动态计划还是静态计划,大多数情况下FAST_FORWARD要比FORWARD_ONLY性能略好.

READ_ONLY SCROLL_LOCKS OPTIMISTIC 三选一

READ_ONLY意味着声明的游标只能读取数据, 游标不能做任何更新操作

SCROLL_LOCKS是另一种极端,将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功

OPTIMISTIC 是相对比较好的一个选择,OPTIMISTIC 不锁定任何数据,当需要在游标中更新数据时, 如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新。

(2)打开游标:

当定义完游标后,游标需要打开后使用,只有简单一行代码: OPEN test_Cursor

注意,当全局游标和局部游标变量重名时,默认会打开局部变量游标。

(3)使用游标:

游标的使用分为两部分, 一部分是操作游标在数据集内的指向,另一部分是将游标所指向的行的部分或全部内容进行操作

只有支持6种移动选项, 分别为到第一行(FIRST ), 最后一行(LAST ), 下一行(NEXT ), 上一行(PRIOR ), 直接跳到某行(ABSOLUTE (n )), 相对于目前跳几行(RELATIVE (n )),

注:这里的移动选项与游标定义时参数有关。

FETCH {6种移动选项} FROM INTO []

(4)关闭游标:

在游标使用完之后,一定要记得关闭, 只需要一行代码:CLOSE+游标名称

CLOSE test_Cursor

(5)释放游标

当游标不再需要被使用后,释放游标,只需要一行代码:DEALLOCATE+游标名称

DEALLOCA TE test_Cursor

对于游标一些优化建议 ∙

∙ 如果能不用游标,尽量不要使用游标 用完用完之后一定要关闭和释放 尽量不要在大量数据上定义游标 尽量不要使用游标上更新数据 尽量不要使用insensitive, static和keyset 这些参数定义游标 如果可以,尽量使用FAST_FORWARD关键字定义游标 如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数

游标使用步骤:

(1)游标定义及参数含义:(具体见博客园)

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]

[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

[ TYPE_WARNING ]

FOR select_statement

[ FOR UPDA TE [ OF column_name [ ,...n ] ] ]

[;]

LOCAL 和GLOBAL 二选一

LOCAL 意味着游标的生存周期只在批处理或函数或存储过程中可见,而GLOBAL 意味着游标对于特定连接作为上下文

FORW ARD_ONLY 和 SCROLL 二选一

FORWARD_ONLY意味着游标只能从数据集开始向数据集结束的方向读取,FETCH NEXT是唯一的选项,而SCROLL 支持游标在定义的数据集中向任何方向,或任何位置移动

STA TIC KEYSET DYNAMIC 和 FAST_FORWARD 四选一

这四个关键字是游标所在数据集所反应的表内数据和游标读取出的数据的关系

STATIC 意味着,当游标被建立时,将会创建FOR 后面的SELECT 语句所包含数据集的副本存入tempdb 数据库中,任何对于底层表内数据的更改不会影响到游标的内容.

DYNAMIC 是和STATIC 完全相反的选项, 当底层数据库更改时,游标的内容也随之得到反映,在下一次fetch 中,数据内容会随之改变

KEYSET 可以理解为介于STATIC 和DYNAMIC 的折中方案。将游标所在结果集的唯一能确定每一行的主键存入tempdb, 当结果集中任何行改变或者删除时,@@FETCH_STATUS会为-2,KEYSET 无法探测新加入的数据

FAST_FORWARD可以理解成FORWARD_ONLY的优化版本.FORWARD_ONLY执行的是静态计划,而FAST_FORWARD是根据情况进行选择采用动态计划还是静态计划,大多数情况下FAST_FORWARD要比FORWARD_ONLY性能略好.

READ_ONLY SCROLL_LOCKS OPTIMISTIC 三选一

READ_ONLY意味着声明的游标只能读取数据, 游标不能做任何更新操作

SCROLL_LOCKS是另一种极端,将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功

OPTIMISTIC 是相对比较好的一个选择,OPTIMISTIC 不锁定任何数据,当需要在游标中更新数据时, 如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新。

(2)打开游标:

当定义完游标后,游标需要打开后使用,只有简单一行代码: OPEN test_Cursor

注意,当全局游标和局部游标变量重名时,默认会打开局部变量游标。

(3)使用游标:

游标的使用分为两部分, 一部分是操作游标在数据集内的指向,另一部分是将游标所指向的行的部分或全部内容进行操作

只有支持6种移动选项, 分别为到第一行(FIRST ), 最后一行(LAST ), 下一行(NEXT ), 上一行(PRIOR ), 直接跳到某行(ABSOLUTE (n )), 相对于目前跳几行(RELATIVE (n )),

注:这里的移动选项与游标定义时参数有关。

FETCH {6种移动选项} FROM INTO []

(4)关闭游标:

在游标使用完之后,一定要记得关闭, 只需要一行代码:CLOSE+游标名称

CLOSE test_Cursor

(5)释放游标

当游标不再需要被使用后,释放游标,只需要一行代码:DEALLOCATE+游标名称

DEALLOCA TE test_Cursor

对于游标一些优化建议 ∙

∙ 如果能不用游标,尽量不要使用游标 用完用完之后一定要关闭和释放 尽量不要在大量数据上定义游标 尽量不要使用游标上更新数据 尽量不要使用insensitive, static和keyset 这些参数定义游标 如果可以,尽量使用FAST_FORWARD关键字定义游标 如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数


相关内容

  • SQL Server数据库笔试题和答案
  • 一 单词解释(2分/个) 34分 Data 数据 Database 数据库 RDBMS 关系数据库管理系统 GRANT 授权 REVOKE 取消权限 DENY 拒绝权限 DECLARE 定义变量 PROCEDURE 存储过程 事务 Transaction 触发器 TRIGGER 继续 continu ...

  • 检验检测设备
  • 起重机械检验检测用仪器设备知识 起重机械检验时常用的仪器设备包括:万用表.绝缘电阻测量仪.钳形电流表.经纬仪.水准仪.测拱仪(自制).便携式测距仪.全站仪.转速表.测厚仪.称重仪.声级计.温湿度计.百分表.压力表.点温计.弹簧秤.游标卡尺.钢卷尺.钢直尺.塞尺.力矩扳手.放大镜(20倍).线锤.常用 ...

  • 2011质量工程师考试大纲-初级[1]
  • 2011年全国质量专业基础知识与实务考试大纲(初级) 第一章质量管理概论 一. 质量与质量管理 (一) 质量的基本知识 1. 掌握质量的定义 2. 了解质量的概念的发展 3. 熟悉质量特性的内涵 (二) 质量管理的基本知识 1. 掌握质量管理的定义 2. 掌握全面质量管理的含义 3. 了解质量管理发 ...

  • Oracle笔试题目带答案
  • 1. ( )程序包用于读写操作系统文本文件.(选一项) A.Dbms_output B.Dbms_lob C.Dbms_random D.Utl_file 2. ( )触发器允许触发操作的语句访问行的列值.(选一项) A.行级 B.语句级 C.模式 D.数据库级 3. ( )是oracle在启动期间 ...

  • 证券投资学实验指导书
  • <证券投资学> 实训报告 分 院(部) 国际学院 教 研 室 教 师 姓 名 纪 伟 学 生 姓名 班级 2016.11.30 实验1 软件使用及系统模拟 第一部分.<行情阅读与股票分析软件的使用> 一.实验目的 1. 了解证券实验室的构成 2. 了解证券市场的行情资讯和交易 ...

  • 组态王绘制历史曲线
  • 目录 功能概述 . .................................................................................................................................. 1 操作步骤 . ...

  • 项目二 技术测量的的基本知识及常用计量器具
  • 项目二 技术测量的基本知识及常用计量器具 项目内容: 1. 技术测量的基本知识. 2. 简单量具的使用知识. 3. 游标卡尺.千分尺的使用与维护. 4. 百分表.万能角度尺的使用与维护. 项目目的: 1. 初步掌握技术测量的基本知识. 2. 能正确使用简单量具进行测量. 3. 能熟练使用游标卡尺.千 ...

  • 2013互换性与测量基础实验指导书
  • 互换性与测量技术基础实验报告 湖南工学院机械工程学院实验室 二00一三年十月 目 录 实验一 技术测量基础(必做)-------------..3 实验二 合像水平仪测量直线度误差(必做)-------.12 实验三 表面粗糙度的测量(必做)-----------.16 实验四 用立式光学比较仪测量 ...

  • 长度的测量物理实验
  • 长度的测量 [实验简介] 长度测量遍及人类活动的所有领域.任何物体都有一定的几何形状,如直线.曲线.平面.曲面.多面棱体.锥体.球体.圆柱体等.表征这些几何形态的参数可归纳为普通参量.形位参量和微观参量.普通参量有长.宽.高.曲率半径.直径及距离.对这些参量的测量称为长度测量,长度测量有两大特点,一 ...