第12单元 创建和使用游标
[学习目标]
掌握游标的概念、类型、使用
知识目标:
了解游标的作用
掌握游标的使用步骤
能力目标:
会创建和使用游标
任务1 游标的作用及使用步骤
(一) 游标概述
游标是一种处理数据的方法,允许应用程序对查询语句SELECT返回的结果集进行逐行处理,而不是一次对整个结果集进行同一种操作。
因此,使用游标方法可以把面向集合的数据库管理系统与面向行的程序设计方法两者结合起来,使两种数据处理方式能够进行沟通。
游标通过以下扩展方式处理结果集。
游标主要用于实现一些不能使用面向集合的语句实现的操作。通过游标,SQL Server提供了一个对结果集进行逐行处理的能力。可以把游标看为一种特殊的指针,它可以指向结果集中的任意位置,在查询数据的同时对数据进行处理。
在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。也就是说,游标是一种数据访问机制,它允许用户访问单独的数据行,而不是对整个数据集合进行操作。
游标是一个在结果集中可以移动的指针,它可以指向结果集中的任意位置,允许用户对指定位置的数据进行处理。游标向数据库发送查询,得到一个记录集,但是游标一次只返回一个记录行,而不是大批返回行。游标可以在记录集上滚动,可以指向记录集中的任何一个记录行。在游标转移到下一个记录之前,可以在当前的记录行上执行所需的外部操作。游标还提供对基于游标位置而对表中数据进行删除或更新的能力。在默认情况下,大多数游标是动态的。
游标主要用在T-SQL批处理、存储过程以及触发器当中,游标处理结果集的方法有以下几种:
定位到结果集的某一行。
从当前结果集的位置搜索一行或一部分行。
允许对结果集中的当前行进行数据修改。
SQL Server 支持两种请求游标的方法。
T-SQL,T-SQL语言支持使用根据SQL-92标准制定的游标语法。
数据库应用程序编程接口(APD游标函数。SQL Server支持ADO(Microsoft ActiveX数据对象)、OLE DB和ODBC(开放式数据库连接)数据库API的游标功能。
应用程序不能混合使用这两种请求游标的方法。已经使用API指定游标行为的应用程序不能再执行T-SQL DECLARE CURSOR语句请求一个T-SQL游标。应用程序只有在将所有的API游标特性设置回默认值后,才可以执行DECLARE CURSOR。
如果既未请求T-SQL游标也未请求API游标,则默认情况下SQL Server将向应用程序返回一个完整的结果集,这个结果集称为默认结果集。
游标通过以下扩展方式处理结果集:
(1)允许定位在结果集的指定行。
(2)从结果集的当前位置检索一行或多行。
(3)支持对结果集中当前位置的数据行进行修改。
(4)支持用户对结果集中的数据进行多级别的可见性修改。
(5)提供在脚本、存储过程和触发器中使用的,访问结果集中数据的T-SQL语句。
1.游标的类型
(1)T-SQL游标
T-SQL游标由DECLARE CURSOR语句定义,主要用在服务器上,通过客户端发送给服务器的T-SQL语句,或批处理、存储过程、触发器等的T-SQL语句进行管理。
(2)API游标
API游标支持在OLE DB、ODBC以及DB_library中使用游标函数,主要用于服务器。
•
(3)客户游标
客户游标是在客户机上进行缓存结果集时才使用。在客户游标中,用默认的结果集作为客户机上的缓存结果集。
API游标和T-SQL游标在服务器端使用,所以称为服务器游标或后台游标,而客户游标被称为前台游标。
2.服务器游标与默认结果集的比较
SQL Server系统有两种方式为用户返回结果集:默认结果集和服务器游标。
(1)默认结果集具有以下特点。
①开销小;②取数据时提供最大性能;③仅支持默认的单进、只读游标功能;④返回结果行时一次一行;⑤连接时一次只支持一个活动语句;⑥支持所有T-SQL语句。
(2)服务器游标具有以下特点。
①支持所有游标功能;②可以为用户返回数据块;③在单个连接上支持多个活动语句;④以性能补偿游标功能;⑤不支持所有返回多于一行结果集的T-SQL语句。
3.服务器游标与客户游标的比较
•
使用服务器游标比使用客户游标有以下的优点。
(1)具有最佳性能:如果要在结果集中访问部分数据,使用服务器游标可以提供最佳性能,因为客户游标在客户端存取所有结果集。
(2)准确的定位更新:服务器游标支持直接定位操作。
•
(3)使用内存少:使用服务器游标,客户端不需要高速存取大量数据或者保持有关游标位置的信息,这些都由服务器来完成。
(4)同时有多个活动语句:使用服务器游标,其结果不会保存在游标操作之间的连接上,这就允许同时拥有多个活动的基于游标的语句。
4.服务器游标类型
(1)静态游标
静态游标又称快照游标,始终是只读的,总是按照打开游标时的原样显示结果集,并不反映在数据库中对任何结果集成员所做的修改,因此不能利用静态游标修改基表中的数据。
(2)动态游标
动态游标又称敏感游标,与静态游标相对,当游标在结果集中滚动时,结果集中的数据记录的数据值、顺序和成员的变化均反映到游标上,用户所做的各种操作均可通过游标进行。
•
(3)单进游标
单进游标只支持游标按从前向后顺序提取数据,游标从数据库中提取一条记录并进行操作,操作完毕后,再提取下一条记录。单进游标能反映用户对结果集所做的全部更改。
(4)键集驱动游标
键集驱动游标介于静态游标和动态游标之间,兼有两者的特点。打开键集驱动游标后,游标中的成员和行顺序是固定的。键集驱动游标由一套唯一标识符控制,这些标识符就是键集。