
网络数据库 NETWORK DATABASE 主讲教师:网络数据库课题组 天津电子信息技木学院·快什学院 ⑧④①⊙

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 第十三章 游标 →13.1游标的定义及优点 →13.2游标的使用 →13.3使用游标修改数据 0④①⊙
1 第十三章 游标 13.1 游标的定义及优点 13.2 游标的使用 13.3 使用游标修改数据

网络数据库 NETWORK DATABASE 授课教师:网络数据库猓题组 13.1游标的定义及其优点 前面介绍的数据检索方法可以得到数据库中有关表的数据,但这些数据是作为一个结 果集得到的,用户可以把这个结果集保存到一个文件里,或生成一个新表以便于以后 使用。这种查询是非常重要的。但这种查询形式有一个很大的缺点,它不能对结果集 中每一行的数据进行处理。使用游标可以实现对查询结果集中的数据逐行处理。 13.1.1游标的概念 。游标(Cuso)是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中 向前或者向后浏览数据的能力。可以把游标看成一种指针,它既可以指向当前位置,也可以指向 结果集中的任意位置,它允许用户对指定位置的数据进行处理,可以把结果集中的数据放在数组、 应用程序中或其它地方。Transact-SQL游标遵循ANSI-92标准。 ⑧0①⊙ 2
2 13.1 游标的定义及其优点 前面介绍的数据检索方法可以得到数据库中有关表的数据,但这些数据是作为一个结 果集得到的,用户可以把这个结果集保存到一个文件里,或生成一个新表以便于以后 使用。这种查询是非常重要的。但这种查询形式有一个很大的缺点,它不能对结果集 中每一行的数据进行处理。使用游标可以实现对查询结果集中的数据逐行处理。 13.1.1 游标的概念 游标(Cursor)是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中 向前或者向后浏览数据的能力。可以把游标看成一种指针,它既可以指向当前位置,也可以指向 结果集中的任意位置,它允许用户对指定位置的数据进行处理,可以把结果集中的数据放在数组、 应用程序中或其它地方。Transact-SQL游标遵循ANSI-92标准

网络数据库 NETWORK DATABASE 授课教师网络数据库课题组 13.1.2使用游标的优点 13.1.2使用游标的优点 从游标定义可以得知游标具有如下的优点,正是这些优点使得游标在实际编程应 用中具有重要作用。 →允许程序对由查询语句SELECT:返回的行集合中的每一行数据执行 相同或不同的操作,而不是对整个行集合执行同一个操作。 ◆提供对基于游标位置的表中的行进行删除和更新的能力。 ◆游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的 程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。 0④⊙
3 从游标定义可以得知游标具有如下的优点,正是这些优点使得游标在实际编程应 用中具有重要作用。 13.1.2 使用游标的优点 允许程序对由查询语句SELECT返回的行集合中的每一行数据执行 相同或不同的操作,而不是对整个行集合执行同一个操作。 提供对基于游标位置的表中的行进行删除和更新的能力。 游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的 程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。 13.1.2 使用游标的优点

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 13.2游标的使用 13.2.1使用游标的步骤 使用游标的工作流程如下图13-1所示。具体地说,有如下几个步骤: 一①创建游标。使用TSQL语句生成一个结果集,并且定义游标的特征,如游标 中的记录是否可以修改。 中②打开游标 一③从游标的结果集中读取数据。从游标中检索一行或多行数据称为取数据: 一④对游标中的数据逐行操作。 一⑤关闭和释放游标。 00①⊙
4 13.2 游标的使用 13.2.1 使用游标的步骤 使用游标的工作流程如下图13-1所示。具体地说,有如下几个步骤: ① 创建游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标 中的记录是否可以修改。 ② 打开游标 ③ 从游标的结果集中读取数据。从游标中检索一行或多行数据称为取数据。 ④ 对游标中的数据逐行操作。 ⑤ 关闭和释放游标

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 13.2.2游标的定义及使用过程 1.声明游标 0 声明游标是指用DECLARE语句声明或创建一个游标。 声明游标的语法如下: DECLARE cursor_name [SCROLL]CURSOR FOR select_statement [FOR [READ ONLYJUPDATE[OF column_name_list])] 其中: cursor_name:是游标的名字,为一个合法的SQL Server标识符,游标的名字必须遵循SQL Server命名规范。 0 SCROLL:表示取游标时可以使用关键字NEXT、PRIOR、FIRST、.LAST、ABSOLUTE、RELATIVE。每 个关键字的含义将在介绍FETCH子句时讲解。 select statement:是定义游标结果集的标准SELECT语句,它可以是一个完整语法和语义的 Transact--SQL的SELECT语句。 ⑧0①⊙
5 13.2.2 游标的定义及使用过程 1. 声明游标 声明游标是指用DECLARE语句声明或创建一个游标。 声明游标的语法如下: DECLAREcursor_name [SCROLL] CURSOR FOR select_statement [FOR {READ ONLY|UPDATE[OF column_name_list]}] 其中: cursor_name:是游标的名字,为一个合法的SQL Server标识符,游标的名字必须遵循SQL Server命名规范。 SCROLL:表示取游标时可以使用关键字NEXT、PRIOR、FIRST、LAST、ABSOLUTE、RELATIVE。每 个关键字的含义将在介绍FETCH子句时讲解。 select_statement:是定义游标结果集的标准 SELECT语句,它可以是一个完整语法和语义的 Transact-SQL的SELECT语句

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 →但是这个SELECT语句必须有FROM子句,不允许使用关键字COMPUTE、 COMPUTE BY、FOR BROWSE和INTO。 FOR READ ONLY:指出该游标结果集只能读,不能修改。 ◆FOR UPDATE:指出该游标结果集可以被修改。 OF column_.name_Iist:列出可以被修改的列的名单。 应该注意: ①游标有且只有两种方式:FOR READ ONLYE或FOR UPDATE。 ②当游标方式指定为FOR READ ONLY时,游标涉及的表不能被修改。 中③当游标方式指定为FOR UPDATE时,可以删除或更新游标涉及的表中的行。通常,这 也是缺省方式,即不指定游标方式时为FOR UPDATE方式。 ④声明游标的DECLARE CURSOR语句必须是在该游标的任何OPEN语句之前。 0④⊙ 6
6 但是这个SELECT语句必须有FROM子句,不允许使用关键字 COMPUTE、 COMPUTE BY、FOR BROWSE 和 INTO。 FOR READ ONLY:指出该游标结果集只能读,不能修改。 FOR UPDATE:指出该游标结果集可以被修改。 OF column_name_list:列出可以被修改的列的名单。 应该注意: ① 游标有且只有两种方式:FOR READ ONLY或FOR UPDATE。 ② 当游标方式指定为FOR READ ONLY时,游标涉及的表不能被修改。 ③ 当游标方式指定为FOR UPDATE时,可以删除或更新游标涉及的表中的行。通常,这 也是缺省方式,即不指定游标方式时为FOR UPDATE方式。 ④ 声明游标的DECLARE CURSOR 语句必须是在该游标的任何OPEN语句之前

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 2.打开游标 ~打开游标是指打开已被声明但尚未被打开的游标,打开游标使用OPEN语句。 ◆打开游标的语法如下: OPEN cursor_name 其中: cursor_.name是一个已声明的尚未打开的游标名。 注意: ·①当游标打开成功时,游标位置指向结果集的第一行之前。 ·②只能打开已经声明但尚未打开的游标。 00①⊙ 7
7 2. 打开游标 打开游标是指打开已被声明但尚未被打开的游标,打开游标使用OPEN语句。 打开游标的语法如下: OPEN cursor_name 其中: •cursor_name是一个已声明的尚未打开的游标名。 注意: • ① 当游标打开成功时,游标位置指向结果集的第一行之前。 • ② 只能打开已经声明但尚未打开的游标

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 3.从打开的游标中提取行 ◆游标被打开后,游标位置位于结果集的第一行前,此时可以从结果集中提取(FETCH)行。SQL Seve将沿着游标结果集一行或多行向下移动游标位置,不断提取结果集中的数据,并修改和保存游 标当前的位置,直到结果集中的行全部被提取。 从打开的游标中提取行的语法如下: FETCH [[NEXTIPRIORFIRST|LASTIABSOLUTERELATIVE]FROM]cursor name [INTO fetch_target_list] 其中: 。cursor_name:为一已声明并已打开的游标名字。 NEXTIPRIORJFIRST|LASTIABSOLUTEJRELATIVE:游标移动方向,缺省情况下是NEXT,即向 下移动。 NEXT:取下一行数据。 PRIOR:取前一行数据。 FIRST:取第一行数据。 ④①⊙
8 3. 从打开的游标中提取行 游标被打开后,游标位置位于结果集的第一行前,此时可以从结果集中提取(FETCH)行。SQL Server将沿着游标结果集一行或多行向下移动游标位置,不断提取结果集中的数据,并修改和保存游 标当前的位置,直到结果集中的行全部被提取。 从打开的游标中提取行的语法如下: FETCH [[NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE] FROM] cursor_name [INTO fetch_target_list] 其中: cursor_name:为一已声明并已打开的游标名字。 NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE:游标移动方向,缺省情况下是NEXT,即向 下移动。 NEXT:取下一行数据。 PRIOR:取前一行数据。 FIRST:取第一行数据

网络数据库 NETWORK DATABASE 授课教师:网络数据库课题组 →LAST:取最后一行数据。 ⊙ABSOLUTE:按绝对位置取数据。 ⊙RELATIVE:按相对位置取数据。 →游标位置确定了结果集中哪一行可以被提取,如果游标方式为FOR UPDATE的 话,也就确定该位置一行数据可以被更新或删除。 ~INTO fetch_target_Iist:指定存放被提取的列数据的目的变量清单。这个清单 中变量的个数、数据类型、顺序必须与定义该游标的select statement的 SELECT list中列出的列清单相匹配。为了更灵活地操纵数据,可以把从已声明并 己打开的游标结果集中提取的列数据,分别存放在目的变量中。NTO fetch target list是T-SQL对ANSl-92SQL标准的扩充。 0④⊙
9 LAST:取最后一行数据。 ABSOLUTE:按绝对位置取数据。 RELATIVE:按相对位置取数据。 游标位置确定了结果集中哪一行可以被提取,如果游标方式为FOR UPDATE的 话,也就确定该位置一行数据可以被更新或删除。 INTO fetch_target_list:指定存放被提取的列数据的目的变量清单。这个清单 中变量的个数、数据类型、顺序必须与定义该游标的select_statement的 SELECT_list中列出的列清单相匹配。为了更灵活地操纵数据,可以把从已声明并 已打开的游标结果集中提取的列数据,分别存放在目的变量中。INTO fetch_target_list是T-SQL对ANSI-92 SQL标准的扩充