第8章视图和游标课件

上传人:沈*** 文档编号:241648004 上传时间:2024-07-12 格式:PPT 页数:45 大小:382.54KB
返回 下载 相关 举报
第8章视图和游标课件_第1页
第1页 / 共45页
第8章视图和游标课件_第2页
第2页 / 共45页
第8章视图和游标课件_第3页
第3页 / 共45页
点击查看更多>>
资源描述
第8章 视图和游标本章导读:视图是从一个或多个基本表或其它视图导出的虚拟表,其数据会伴随引用的基本表或其它视图数据变化而变化。游标是一种数据访问机制,允许用户访问单独的数据行,而非整个数据行集,用户也可以通过游标进行查询、插入、更改和删除基表中的数据。知识要点:视图 游标8.1 视图8.2 游标8.1 视图视图视图不是真实存在的基表,而是从基表或其它视图导出的虚拟表。视图中并不存放数据,只存放对基表或其它视图的查询定义,所以一切对视图的操作归根究底都是对基表的操作。8.1.1 视图的概念8.1.2 创建视图8.1.3 修改视图8.1.4 使用视图8.1.5 查看视图8.1.6 删除视图8.1.1 视图的概念视图的概念视图是关系数据库提供给用户多角度观察数据的重要机制,它保存了对基表或其它视图的查询定义,其运行结果是一种来源于对基表的查询数据集的引用。用户可以像对基本表一样对待视图,与表相似的是,利用视图不仅可以查询数据,还可以插入、删除和更新其中数据,并将更改结果永久地存储在磁盘上的基本表中。和真实的表一样,视图运行时也显示一系列带有行和列的数据,但其数据并不真实地存储在视图中,而仍然存储在视图所引用的基表中。使用视图有很多优点,主要有以下4个方面。(1)简化用户操作:用户可以将频繁使用的复杂条件查询定义为视图,通过一条简单的查询语句来查询视图即可获得对基表的复杂查询结果集,不必重写复杂的查询语句,从而简化用户的数据查询操作。(2)灵活定制数据:视图机制提供了用户一种多角度透视数据集,使用户可以将注意力集中在自己所关心的数据上,屏蔽了数据结构的复杂性,无须了解数据库的全部数据结构及其来源。当有多用户共享同一数据库时,这种灵活性显得极为重要。(3)重构逻辑数据:使用视图,可以逻辑上重构数据结构,在一定程度上确保数据的逻辑独立性,如基表结构发生改变(增加新关系或对原关系增加新属性)时,可以通过视图重构数据结构来重载用户数据而无须修改原有的应用程序。(4)提供安全保护:用户只能看到视图中的数据,不能看到基表中的其它数据,使机密数据不会出现在无关用户视图中。定义视图加上with check option子句,可以确保用户只能增删改视图中满足条件的数据,从而提高数据的安全性。8.1.2 创建视图创建视图创建视图时,需注意以下几点。(1)要创建视图,用户必须获取数据库所有者授权使用create view语句,并具有与定义视图有关的表或视图的相应权限。(2)只能在当前数据库中创建视图,但可以引用其它数据库中的表和视图,甚至可以是其它服务器上的表和视图。(3)一个视图最多可以引用1024个列,且这些列可以来自不同的表或视图。(4)在用select语句定义的视图中,如果在视图的基表中加入新列,则新列不会在视图中出现,除非先删除视图再重建它。(5)如果视图中的某一列是函数、数学表达式、常量或来自多个表的列名相同,则必须为此列定义一个不同的名称。(6)即使删除了一个视图所依赖的表或视图,这个视图的定义仍然保留在数据库中。8.1.2 创建视图创建视图1用视图设计器创建视图在SQL Server 2000中,视图设计器的界面和查询设计器基本相同,分为表区(又称关系图窗格)、列区、代码区和数据结果区4个区,只是在初始状态时,表区中没有表。【例8-1】利用企业管理器创建一视图,数据来源于学生和选修表中“学号,姓名,性别,课程号,成绩”,且课程号限定为“01”。操作步骤如下所示:(1)展开企业管理器控制台目录,直至出现要创建视图的数据库(jxgl)节点,右击“视图”节点,弹出快捷菜单,选择“新建视图”命令,如图8-1所示;单击释放后,弹出“视图设计器”对话框,如图8-2所示。8.1.2 创建视图创建视图图8-1 “企业管理器”对话框 图8-2 “视图设计器”对话框18.1.2 创建视图创建视图(2)右击设计器中的表区,弹出快捷菜单,选择“添加表”命令,如图8-3所示;单击释放后,弹出“添加表”对话框,如图8-4所示,选择要创建的基表、视图和函数(外部)。图8-3 “视图设计器”对话框2图8-4 “添加表”对话框8.1.2 创建视图创建视图(3)这里选择“选修”和“学生”表,单击“添加”按钮,将其添加到表区,如图8-5所示。然后在列区选择需要在视图中显示的数据列,并设置相应的输出、排序类型、排序顺序和条件。单击“运行”按钮,将包含在视图中的数据行输出到数据结果区中。图8-5 “视图设计器”对话框38.1.2 创建视图创建视图(4)单击“保存”命令,弹出“保存”对话框,将新建的视图保存为“view”,如图8-6所示。图8-6 “视图设计器”对话框48.1.2 创建视图创建视图2用create view命令创建视图用T-SQL语句创建视图的语法格式如下:create view 数据库拥有者.with encryption|schemabinging|view_metadataas sql语句with check option说明:(1)with encryption:在系统表syscomments中对create view语句进行加密;(2)with schemabinging:将视图与其所依赖的表或视图结构关联;(3)with view_metadata:指定引用视图的查询请求浏览模式的元数据时,向DBLIB、ODBC或OLEDB API返回有关视图的元数据信息,而不是返回给基表或其它表;(4)with check option:限制在视图上的修改都要符合SQL语句中设置的条件;(5)sql-select语句中不能包含compute 子句、compute by子句或into子句;(6)sql-select语句中不能包含order by子句,除非select子句中包含top子句;(7)当存在计算列表达式、同名列、列别名时,必须指定视图中每列的名称。8.1.2 创建视图创建视图【例8-2】创建一个视图,数据来源于学生表的列“学号,姓名,性别,籍贯,总分”数据,且学号前6位为“080201”。use jxglgocreate view Inform asselect 学号,姓名,性别,籍贯,总分 from 学生 where left(学号,6)=0802018.1.2 创建视图创建视图【例8-3】创建一个视图包含了所有成绩不及格的课程名称及学生学号和姓名等信息。use jxglgocreate view v_不及格asselect 学生.学号,姓名,课程名称,成绩 from 学生,选修,课程 where 学生.学号=选修.学号 and 选修.课程号=课程.课程号 and 成绩608.1.3 修改视图修改视图修改视图有两种方式:一是使用T-SQL语句,二是使用企业管理器。1使用T-SQL语句修改视图用T-SQL语句修改视图的语法格式如下:alter view 数据库拥有者.with encryption|schemabinging|view_metadataas sql语句 with check option功能:对指定的视图进行修改。说明:(1)不论视图是否加密,均可修改;(2)各子句与创建视图的子句含义一样。8.1.3 修改视图修改视图2使用企业管理器修改视图使用企业管理器修改视图的步骤如下:(1)在企业管理器中,展开企业管理器控制台目录,直至已创建视图的数据库(jxgl)节点,单击“视图”节点,在右侧“内容显示”窗口中将会出现本数据库中的所有视图名。(2)右击“view1”视图,弹出快捷菜单,选择“设计视图”选项,弹出如图8-5所示的视图设计器。(3)在视图设计器中,用户可以对视图信息进行修改,修改方法与设计视图一样。修改完成后,单击工具栏上的保存按钮即可。8.1.4 使用视图使用视图视图是一个虚拟表,视图使用上类似于表,利用视图不仅可以查询数据,还可以修改基表中的数据。因为有些视图的更新不能惟一、有意义地转换成对相应基本表的更新,所以并不是所有视图都是可更新视图。要通过视图修改(insert、delete和update)基表中数据,必须保证视图是可更新视图。基本表的行列子集视图 若一个视图是从单个基本表导出来的,并且只是去掉了基本表的某些行和某些列,但保留了主键,则称这些视图为行列子集视图。一般是可更新的,若视图的属性来自集函数、表达式,则该视图肯定是不可更新的。可更新视图必须满足以下条件:(1)视图中没有聚合函数,且没有top、group by、union子句及distinct关键字;(2)视图的select语句不含从基本表列通过计算所得列;(3)在一个基表上建立的视图,只有包含基本表的主码才是可更新视图;(4)通过instead of 触发器创建的可更新视图;(5)利用视图修改数据时,一条语句不能影响到多个基表中的数据;(6)利用视图修改列值时,必须符合基表对列值的约束条件;(7)创建的视图的select语句的from子句至少包含一个基本表。(8)若视图定义中使用了with check option子句,则对视图所执行的数据修改都必须符合视图中select语句所设定的条件;8.1.4 使用视图使用视图1查询视图视图的查询和表的查询一样,使用视图查询时,若其关联的基本表添加了新字段,则必须重新创建视图才能查询到新字段。【例8-4】查询视图Inform中的所有记录。select*from Inform2插入数据当视图引用多个基表时,则向视图插入数据只能指定其中一个表的列。【例8-5】向视图Inform插入一个新的学生记录。记录数据如下:学号:08020104,姓名:马后炮,性别:男insert into inform(学号,姓名,性别)values(08020104,马后炮,男)运行后,表“学生”和视图“inform”都会新增这条记录。8.1.4 使用视图使用视图3更新数据若一个视图依赖多个基本表,则一次修改视图只能变动一个基本表的数据,但可以通过多条语句多次修改的方式涉及多个表。【例8-6】对视图Inform的新增的记录的性别修改为“女”。update inform set 性别=女 where 学号=080201044删除数据对于依赖多个基表的视图,不能使用delete语句。【例8-7】将视图新增的记录的记录删除。delete inform where 学号=080201048.1.5 查看视图查看视图同样有种方法:一是利用企业管理器,二是利用T-SQL语句。利用T-SQL语句查看视图命令主要有3个:(1)sp_depends:查看视图对象的参照对象和字段信息。(2)sp_help:查看数据库对象的数据类型信息。(3)sp_helptext:查看视图的详细定义文本信息。8.1.6 删除视图删除视图同样有种方法:一是利用企业管理,二是利用T-SQL语句。利用T-SQL语句删除的视图语法格式如下:格式:drop view 视图名说明:删除指定的视图。8.2 游标游标在数据库应用程序中,对数据行的操作有两种方式:一种是基于数据行集合的整体处理方式,由用户直接使用insert、update、delete等SQL语句操作所有符合条件的数据行;另一种是逐行处理数据行的方式,而游标就是这种数据访问机制,允许用户访问单独的数据行,而非整个数据行集。另外,用户也可以使用游标进行查询、更改和删除基表中的数据。游标在使用时共有5种状态,分别对应使用游标的5个步骤:即声明游标打开游标读取数据关闭游标删除游标。8.2.1 游标的概念8.2.2 游标的分类8.2.3 声明游标 8.2.4 打开游标 8.2.5 读取游标8.2.6 关闭游标8.2.7 删除游标8.2.8 更新和删除游标数据8.2.1 游标的概念游标的概念SQL Sever通过游标实现了对一个结果集进行逐行处理的方式,游标可以被看作是一种与查询结果集相关联的特殊指针,指向单个行的位置实体,以便对指定位置的数据行进行处理,使用游标可以在查询数据的同时对数据进行处理。游标的完整结果集在游标打开时,临时存储在tempdb数据库中。游标主要功能如下:(1)允许定位在结果集的特定行;(2)从结果集的当前位置检索一行或多行;(3)支持对结果集中当前位置的行进行数据更新和删除;(4)如果其它用户需要对显示在结果集中的数据库数据进行修改,游标可以提供不同级别的可见性支持;(5)为脚本、存储过程和触发器提供访问游标结果集的Transact-SQL语句。8.2.2 游标的分类游标的分类游标分类方法很多,根据游标结果集是否允许被修改,游标可以分为只读游标和可写游标;根据游标在结果集中的移动方式,SQL Server将游标分为滚动游标和只进游标;根据游标创建方式和执行位置,游标分为三类:T-SQL游标、API(应用程序接口)游标和客户端游标;根据处理特性,API游标分为四种类型:只进游标、静态游标、动态游标、键集游标。1只进游标只进游标只能从头到尾按顺序提取数据行,也能动态实时地显示update、insert、delete语句对结果集成员操作后的影响(数据值、顺序,下同)。但是由于只进游标只能向表尾移动,因而在行提取后对该行操作的影响不会动态实时地显示。2静态游标静态游标只能原样显示打开时的初始结果集的游标,不会动态实时地显示update、insert、delete语句对结果集成员操作后的影响,除非重新打开游标。静态游标是只读的,因而不能更新基表数据。Transact-SQL和DB-Library称静态游标为不感知游标,而一些数据库API将静态游标识别为快照游标。8.2.2 游标的分类游标的分类3动态游标动态游标也称敏感游标,与静态游标相对,当游标滚动时,能动态实时地显示update、insert、delete语句对结果集成员操作后的影响,而无需重新打开游标。4键集游标键集游标键集游标键集游标介于静态游标和动态游标之间,兼有二者特点。介于静态游标和动态游标之间,兼有二者特点。键集游标键集游标依依赖唯一标识数据行的关键字(赖唯一标识数据行的关键字(tempdb数据库只临时存储数据行的键值)数据库只临时存储数据行的键值)来提取数据行。能动态地显示来提取数据行。能动态地显示update语句对基表中非关键字列操作后语句对基表中非关键字列操作后的影响,的影响,但不能动态地显示但不能动态地显示insert语句对基表操作后的影响,除非重语句对基表操作后的影响,除非重新打开游标。使用新打开游标。使用API函数,如函数,如ODBC SQLSetPos函数,对游标所做函数,对游标所做的的insert操作影响显示在游标的末尾。如果试图提取一个在打开游标操作影响显示在游标的末尾。如果试图提取一个在打开游标后被删除的行,则后被删除的行,则fetch_status将返回一个将返回一个“行缺少行缺少”状态。状态。8.2.3 声明游标声明游标 声明游标有两种语法形式,一种是ANSI标准的语法格式,其语法格式如下:declare 游标名称 insensitivescroll cursorfor select语句/*select查询语句*/forread only|updateof 列名,.n/*可修改的列*/说明:(1)游标名称:必须遵从SQL Server标识符命名规则;(2)insensitive:静态游标,不会随着基表内容变化而变化,也不能与for update一起使用,因而无法更新游标内数据(隐式只读游标)。省略时,则对基表的删除和更新影响都会显示在游标后续提取数据行中;注意:当遇到以下情况发生时,游标将自动设定insensitive选项。1)在select 语句中使用distinct、group by、having、union语句;2)使用outer join;3)所选取的任意表没有索引;4)将实数值当作选取的列。8.2.3 声明游标声明游标(3)scroll:滚动游标,支持fetch命令的所有提取选项(first、last、prior、next、relative、absolute),省略时,则只支持next选项;(4)select语句:定义游标结果集的标准select语句,其中不允许使用compute、compute by、for browse和into子句;(5)read only:只读游标,无法更新游标内数据,即update或delete语句的where current of子句中,不允许引用该游标。省略时,则允许更新游标内数据。(6)for update of列名,.n:如果指定of列名,.n,表示只更新给出的列,省略of列名,.n时,除非指定了read only并发选项,否则表示可更新所有列。8.2.3 声明游标声明游标另一种是使用T-SQL扩展定义的语法格式,其语法格式如下:declare 游标名称 cursorlocal|global /*游标作用域*/forward_only|scroll /*游标移动方向*/static|keyset|dynamic|fast_forward /*游标类型*/read_only|scroll_locks|optimistic /*访问属性*/type_warning/*类型转换警告信息*/for select语句/*select查询语句*/for updateof 列名,.n/*可修改的列*/说明:(1)游标名称:必须遵从SQL Server标识符命名规则;(2)local:局部游标,作用域局限于创建它的批处理、存储过程或触发器中;(3)global:全局游标,作用域局限于连接执行的任何存储过程或批处理中,都可以引用该游标名称;(4)scroll:滚动游标,支持fetch命令的所有提取选项(first、last、prior、next、relative、absolute),static、keyset和dynamic游标默认为scroll;(5)forward_only:只进游标,只支持fetch next选项;8.2.3 声明游标声明游标注意:1)游标移动方向默认是forward_only,除非指定了static、keyset、dynamic选项或游标移动方向scroll选项;2)forward_only支持static、keyset和dynamic游标类型;3)指定forward_only时,而没有指定static、keyset和dynamic关键字,则游标作为dynamic(动态游标)类型;4)fast_forward和forward_only是互斥的,如果指定一个,则不能指定另一个。(6)static:静态游标;(7)keyset:键集游标;(8)dynamic:动态游标,不支持fetch absolute提取选项;(9)fast_forward:优化了的forward_only、read_only游标;注意:fast_forward不能与scroll、scroll_locks、optimistic、forward_only和for_update同时使用。8.2.3 声明游标声明游标(10)read_only:只读游标,禁止更新游标结果集中的数据,且update或delete语句的where current of子句中不能引用游标;(11)scroll_locks:锁定数据行,确保通过游标进行的定位更新或定位删除执行成功,不能同时指定scroll_locks和fast_forward不能同时使用;(12)optimistic:指定数据行读入游标后已得到更新,则通过游标进行的定位更新或定位删除执行不成功,optimistic与;(13)type_warning:指定如果游标从所请求的类型隐性转换为另一种类型,则给客户端发送警告消息;(14)select语句:定义游标结果集的标准select语句,其中不允许使用compute、compute by、for browse和into子句。8.2.3 声明游标声明游标注意:1)如果有下列四种情况之一,则系统自动将游标声明为静态游标:select语句中包含distinct、union、group by子句或having选项;select语句查询的一个或多个基表没有唯一性所引;select子句的列名表中包含了常量表达式;)查询使用了外连接。2)如果有下列两种情况之一,则系统自动将游标声明为只读游标:select语句中包含order by 子句;声明游标时使用了insensitive选项。(15)for update of列名,.n:如果指定of列名,.n,表示只更新给出的列;省略时,表示可更新所有列,除非指定了read_only并发选项。8.2.3 声明游标声明游标【例8-8】使用ANSI标准方式声明一个只读游标,结果集为“学生”表中的所有男同学。use jxgl declare boy insensitive cursor for select*from 学生 where 性别=男 go【例8-9】使用T-SQL扩展方式声明一个本地、只进、动态和只读游标,结果集为“学生”表中的所有女同学。use jxgldeclare girl cursor local forward_only dynamic for select*from 学生 where 性别=女 for read only8.2.4 打开游标打开游标游标声明后,还必须打开游标才能获取游标的结果集,打开游标的语法格式如下:open global游标名称|游标变量的名称说明:(1)global:表示存在同名全局游标和局部游标时,指定global,则游标是全局游标,否则是局部游标;(2)打开一个不存在的游标或者打开一个已经打开的游标,均会提出出错;(3)游标打开后,可以使用全局变量cursor_rows来返回游标中数据行的数量,该变量取值如下:1)-m:表示游标异步构造,其绝对值表示目前已读取的行数;2)-1:表示游标为动态游标;3)0:表示没有游标打开;4)n:表示游标中含有n行数据。8.2.4 打开游标打开游标【例8-10】声明一个游标,结果集为“学生”表中的所有男同学,验证cursor_rows全局变量在游标打开前后的状态值。use jxgldeclare boy scroll cursor for select*from 学生 where 性别=男-没有打开游标时,cursor_rows返回值为0if cursor_rows=0 print 没有打开的游标open boy-打开游标后,cursor_rows返回当前游标的总行数if cursor_rows 0 print cursor_rowsgo8.2.5 读取游标读取游标打开游标后,就可以对游标进行读取数据,读取游标的语法格式如下:fetch next|prior|first|last|absolute n|nvar|relative n|nvar from global游标名称|游标变量名称into变量名,.n说明:(1)next:游标的默认提取选项,返回当前行之后的数据行,如果fetch next为对游标的第一次提取操作,则返回结果集中的第一行;(2)prior:返回当前行之前的数据行,如果fetch prior为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前;(3)first:返回游标中的第一行并将其作为当前行;(4)last:返回游标中的最后一行并将其作为当前行;(5)absolute:返回数据集的第n行,n必须为整型常量且nvar必须为smallint、tinyint或int;8.2.5 读取游标读取游标注意:1)如果n或nvar为正数,从数据集的开头算起;2)如果n或nvar为负数,从数据集的结尾算起;3)如果n或nvar为0,则没有行返回。(6)relative:返回数据集中相对于当前行的第n行,n必须为整型常量且nvar必须为smallint、tinyint或int;注意:1)如果n或nvar为正数,从数据集的开头算起;2)如果n或nvar为负数,从数据集的结尾算起;3)如果n或nvar为0,返回当前行;4)如果对游标的第一次提取操作时将fetch relative的n或nvar指定为负数或0,则没有行返回。8.2.5 读取游标读取游标(7)global:指定游标名称为全局游标,省略时为局部游标;(8)游标名称:要从中进行提取的开放游标的名称;(9)游标变量名:引用要进行提取操作的打开的游标;(10)into 变量名,.n:允许将提取操作的列数据放到局部变量中;注意:1)列表中的各个变量从左到右与游标结果集中的相应列关联;2)各变量的数据类型必须与结果列的数据类型或其隐性转换的数据类型相匹配;3)变量的数目必须与游标中列表数目一致。(11)读取游标时,可以使用全局变量fetch_status来返回游标提取后的状态值,该变量取值如下:1)0:表示上一个fetch语句执行成功;2)1:fetch语句执行失败,没有提取出数据行,即索要读取的数据行不在结果集中;3)2:被提取的行不再是结果集中的成员,即已经被删除。8.2.5 读取游标读取游标【例8-11】创建一游标显示080101班的所有成绩及格的同学记录,并通过使用全局变量fetch_status输出游标中的所有记录。use jxgldeclare pass_score scroll cursor for select*from 选修 where left(学号,6)=080101 and 成绩=60 order by 学号-打开游标open pass_score-读取游标fetch next from pass_score-循环读取游标while fetch_status=0begin fetch next from pass_scoreend8.2.6 关闭游标关闭游标格式:close global游标名称|游标变量名称说明:(1)关闭一个开放的游标,释放当前结果集,解除定位游标行上的游标锁定;(2)关闭游标并不意味着释放它的所有资源,所以在关闭游标后,不能创建同名的游标;(3)关闭游标后,不允许提取和定位更新,除非重新打开游标。【例8-12】关闭一个已经打开的游标,然后声明一个同名游标。use jxgldeclare boy cursor for select*from 学生 where 性别=男 for read only open boy close boydeclare boy scroll cursor for select*from 学生 where 性别=男 and left(学号,6)=080101Go运行结果如下:服务器:消息 16915,级别 16,状态 1,行 8名为 boy 的游标已存在。8.2.7 删除游标删除游标删除游标引用由deallocate语句实现。当释放最后的游标引用时,组成该游标的数据结构由SQL Server系统释放。格式:deallocate global 游标名称|游标变量名称说明:(1)删除游标是指删除与游标名称或游标变量之间的关联,不能用open语句打开游标;(2)如果一个名称或变量是最后引用游标的名称或变量,则释放游标后,游标使用的任何资源也随之释放;(3)删除游标后,可以创建新的同名游标。8.2.8 更新和删除游标数据更新和删除游标数据若要利用游标更新或删除游标及其基表数据,则该游标必须声明为可更新的游标,即声明游标时,使用update关键字;然后利用update语句或delete语句来更新和删除游标中数据行,操作完毕后,基表中相应的数据行也会得到更新或删除。1更新游标格式:update where current of 说明:更新游标中最近一次读取的记录。【8-13】声明一个可更新的游标up_score_cursor,该游标中数据为选修表中成绩小于60分的记录,并限定成绩为可更新列,然后再通过游标将成绩加5分。use jxglgodeclare up_score_cursor cursorfor select 学号,课程号,成绩 from 选修 where 成绩60 for update of 成绩-打开游标open up_score_cursor-读取游标fetch next from up_score_cursor-循环更新和读取游标中数据行while fetch_status=0 begin update 选修 set 成绩=成绩+5 where current of up_score_cursor fetch next from up_score_cursor end-关闭游标close up_score_cursor-释放游标deallocate up_score_cursor-查询成绩中小于60的数据行select 学号,课程号,成绩 from 选修 where 成绩608.2.8 更新和删除游标数据更新和删除游标数据2删除游标格式:delete where current of 说明:删除游标中最近一次读取的记录。【例8-14】声明一个可更新的游标up_score_cursor,该游标中数据为选修表中成绩为空的记录,然后再通过游标删除成绩为空的记录。use jxglgodeclare del_score_cursor cursorfor select 学号,课程号,成绩 from 选修 where 成绩 is null for update-打开游标open del_score_cursor-读取游标fetch next from del_score_cursor-循环更新和读取游标中数据行while fetch_status=0 begin delete from 选修 where current of del_score_cursor fetch next from del_score_cursor end-关闭游标close del_score_cursor-释放游标deallocate del_score_cursor-查询成绩中为空的数据行select 学号,课程号,成绩 from 选修 where 成绩 is null8.2.9 游标状态游标状态在游标的使用过程,可以使用函数cursor_status测试游标的状态,其回值及其含义如表8-1所示。1)1:游标的结果至少有一页;2)0:游标的结果集为空;3)1:游标被关闭;4)2:游标不可用;5)3:游标名称不存在;8.2.9 游标状态游标状态【例8-15】测试游标的状态。use jxgldecalare status_boy scroll cusor for select*from 学生 where 性别=男print cursor_status(global,boy)open boyprint cursor_status(global,boy)go运行结果:11本章小结本章小结视图是一个虚拟表,数据库中只存放视图的定义,而不存放视图引用的数据,这些数据仍然存在基表中,视图就像一个窗口,透过它可以查看和修改用户需要的数据。游标是映射结果集并在结果集内的单个行上建立一个位置的实体。游标为用户提供定位、检索、修改结果集中单行数据的功能。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!