欢迎来到天天文库
浏览记录
ID:57001603
大小:204.00 KB
页数:37页
时间:2020-07-26
《数据库基础第9章 游标、事务与锁课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章游标、事务与锁本章学习目标l理解游标、事务的概念及作用l了解锁的相关知识l掌握并灵活运用游标和事务以提高系统开发效率9.1游标9.1.1游标及其作用数据库的游标是类似于C语言指针的语言结构。通常情况下,数据库执行的大多数SQL命令都是同时处理集合内部的所有数据。但是,有时用户也需要对这些数据集合中的某一行进行操作。在没有游标的情况下,这种工作不得不放到数据库前端用高级语言来实现,这将导致不必要的数据传输,从而延长执行时间。通过使用游标就可以在服务器端有效地解决这个问题。游标支持以下功能;①在结果集中定位特定行。②从结果集的当前位置检索行。③支持对结果集中当前位置的行进行数据修改。9.1.
2、2使用游标游标主要用在存储过程、触发器和Transact_SQL脚本中。用户可以把它理解为一种特殊变量,也必须先声明后使用。游标的使用可以总结为6个步骤:声明游标、打开游标、提取数据、修改数据、关闭游标、释放游标。1.声明游标声明游标的语法如下:DECLAREcursor_name[INSENSITIVE][SCROLL]CURSORFORselect_statement[FOR{READONLY
3、UPDATE[OFcolumn_name[,...n]]}]其中:lcursor_name:为游标名称。游标命名必须遵从Transact-SQL标识符规则。lINSENSITIVE:定义一个游标时将
4、在tempdb数据库中创建一个临时表,用于存储由该游标提取的数据。任何通过这个游标进行的操作,都在这个临时表里进行。因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。如果省略INSENSITIVE,那么用户对基表进行的任何操作都将在游标中反映出来。lSCROLL:指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果在声明时未指定SCROLL,则声明的游标只具有默认的NEXT功能。是唯一支持的提取选项。如果指定SCROLL,则不能也指定FAST_FORWARD。lselect_statement:是
5、定义游标结果集的标准SELECT语句。在游标声明的SELECT语句内不允许使用关键字COMPUTE、COMPUTEBY、FORBROWSE和INTO。lREADONLY:设置游标为只读,使用该关键字时,不能通过该游标更新数据。在UPDATE或DELETE语句的WHERECURRENTOF子句中不能引用游标。lUPDATE[OFcolumn_name[,...n]]:定义游标内可更新的列。如果指定OFcolumn_name[,...n]参数,则只允许修改所列出的列。如果在UPDATE中未指定默认为可以更新所有列。2.打开游标在使用游标之前,必须首先打开游标,方可执行指定操作。语法格式如下:OPE
6、N{{[GLOBAL]cursor_name}
7、cursor_variable_name}lN:该CURSOR所定义的数据已完全从表中读入,N为全部的数据行。l-M:该CURSOR所定义的数据未完全从表中读入,M为目前CURSOR数据子集内的数据行。l0:无符合条件的数据或该CURSOR已被关闭或释放。l-1:该游标为动态的,数据行经常变动无法确定。其中:lGLOBAL:指定cursor_name为全局游标。lcursor_name:已声明的游标名称。如果全局游标和局部游标都使用cursor_name作为其名称,那么如果指定了GLOBAL,cursor_name指的是全局游标,否则lcurso
8、r_name指的是局部游标。打开一个游标以后,可以使用无参函数@@ERROR来判断打开操作是否成功。如果这个函数的返回植为0,则表示游标打开成功,否则表示游标打开失败。当游标打开成功之后,可以使用无参函数@@CURSOR_ROWS来获取这个游标中当前存在的记录行数。无参函数@@CURSOR_ROWS有四种可能的取值:3.从游标中提取记录使用FETCH语句可以从游标中提取特定的一行记录。其语法格式如下:FETCH [NEXT
9、PRIOR
10、FIRST
11、LAST
12、ABSOLUTE{n
13、@nvar}
14、RELATIVE{n
15、@nvar} ] FROM [GLOBAL]curs
16、or_name}
17、@cursor_variable_name}[INTO@variable_name[,...n]]其中各参数意义如下:lNEXT:返回紧跟当前行之后的结果行,并且当前行递增为结果行。如果FETCHNEXT为对游标的第一次提取操作,则返回结果集中的第一行。NEXT为默认的游标提取选项。lPRIOR:返回紧临当前行前面的结果行,并且当前行递减为结果行。如果FETCHPRIOR为对游标
此文档下载收益归作者所有