游标操作和应用课件

上传人:痛*** 文档编号:241565822 上传时间:2024-07-05 格式:PPTX 页数:34 大小:186.65KB
返回 下载 相关 举报
游标操作和应用课件_第1页
第1页 / 共34页
游标操作和应用课件_第2页
第2页 / 共34页
游标操作和应用课件_第3页
第3页 / 共34页
点击查看更多>>
资源描述
第10章游标操作和应用10.1 10.1 游标声明游标声明 10.2 10.2 游标数据操作游标数据操作 10.3 10.3 游标应用实例分析游标应用实例分析 2024年年7月月5日日110.1 游标声明10.1.1 10.1.1 游标声明(游标声明(1 1)1 1DECLARE CURSORDECLARE CURSOR命令命令(SQL-92(SQL-92标准标准)语法格式:语法格式:DECLARE DECLARE INSENSITIVESCROLLCURSOR INSENSITIVESCROLLCURSOR FORSELECT FOR FORREAD ONLY|UPDATEOF FORREAD ONLY|UPDATEOF,2024年年7月月5日日210.1 游标声明 10.1.1 10.1.1 游标声明(游标声明(1 1)参数说明:参数说明:(1 1)INSENSITIVEINSENSITIVE指出所声明的游标为不敏感游标,即静指出所声明的游标为不敏感游标,即静态游标。当省略态游标。当省略INSENSITIVEINSENSITIVE选项时,已提交的游标基表修选项时,已提交的游标基表修改和删除操作能够反映到其后的游标提取结果中。改和删除操作能够反映到其后的游标提取结果中。(2 2)SCROLLSCROLL指出该游标可以用指出该游标可以用FETCHFETCH命令里定义的所有方命令里定义的所有方法来存取数据,允许删除和更新(假定没有使用法来存取数据,允许删除和更新(假定没有使用INSENSITIVEINSENSITIVE选项);选项);(3 3)SELECT 语句决定游标结果集合,但在其中不语句决定游标结果集合,但在其中不能使用能使用COMPUTECOMPUTE、COMPUTE BYCOMPUTE BY、FOR BROWSEFOR BROWSE和和INTOINTO等关键字。等关键字。(4 4)FOR READ ONLYFOR READ ONLY或或FOR UPDATEFOR UPDATE说明游标为只读的或可说明游标为只读的或可修改的。默认是可修改的。修改的。默认是可修改的。(5 5)UPDATE OF UPDATE OF,定义可以修改的定义可以修改的列。如果省略列。如果省略 OF OF,,则允许修改所有列。,则允许修改所有列。2024年年7月月5日日310.1.1 游标声明10.1.1 10.1.1 游标声明(游标声明(1 1)【例10-1】下面语句声明游标CSstudent_cur1:【例【例10-1】下面的语句声明游标】下面的语句声明游标“学生表学生表_cur1”。DECLARE 学生表学生表_cur1 SCROLL CURSORFOR SELECT 学号学号,姓名姓名,性别性别,籍贯籍贯,所在院系所在院系,累计学分累计学分 FROM 学生表学生表 WHERE 专业专业=计算机计算机2024年年7月月5日日10.1 游标声明10.1.1 10.1.1 游标声明游标声明(2 2)2 2DECLARE CURSORDECLARE CURSOR命令命令(Transact-SQL)(Transact-SQL)语法格式:语法格式:DECLARE DECLARE CURSOR CURSOR LOCAL|GLOBAL LOCAL|GLOBAL FORWARD_ONLY|SCROLL FORWARD_ONLY|SCROLL STATIC|KEYSET|DYNAMIC|FAST_FORWAR STATIC|KEYSET|DYNAMIC|FAST_FORWAR READ_ONLY|SCROLL_LOCKS|OPTIMISTIC READ_ONLY|SCROLL_LOCKS|OPTIMISTIC TYPE_WARNING TYPE_WARNING FORSELECT FOR FOR UPDATEOF FOR UPDATEOF,2024年年7月月5日日510.1 游标声明10.1.1 10.1.1 游标声明(游标声明(2 2)参数说明:参数说明:(1 1)LOCALLOCAL和和GLOBALGLOBAL选项分别说明选项分别说明DECLARE CURSORDECLARE CURSOR语句语句所声明的游标为局部游标和全局游标。所声明的游标为局部游标和全局游标。(2 2)FORWARD_ONLYFORWARD_ONLY选项声明只进游标,即选项声明只进游标,即FETCHFETCH语句语句中只能使用中只能使用NEXTNEXT选项。选项。(3 3)STATICSTATIC与与SQL-92SQL-92声明中的声明中的INSENTIVEINSENTIVE关键字的功能相关键字的功能相同,它将游标声明为静态游标,禁止应用程序通过它修改同,它将游标声明为静态游标,禁止应用程序通过它修改基表数据。基表数据。(4 4)DYNAMICDYNAMIC将游标声明为动态游标,也就是说,其结将游标声明为动态游标,也就是说,其结果结合是动态变化的,能够随时反映用户已提交的更改结果结合是动态变化的,能够随时反映用户已提交的更改结果。提取动态游标数据时,不能使用果。提取动态游标数据时,不能使用ABSOLUTEABSOLUTE提取选项定提取选项定位游标指针。位游标指针。(5 5)KEYSETKEYSET关键字声明键集驱动游标,键集游标中的数关键字声明键集驱动游标,键集游标中的数据行及其顺序是固定的。据行及其顺序是固定的。2024年年7月月5日日10.1 游标声明10.1.1 10.1.1 游标声明(游标声明(2 2)参数说明:参数说明:(1 1)LOCALLOCAL和和GLOBALGLOBAL选项分别说明选项分别说明DECLARE CURSORDECLARE CURSOR语句语句所声明的游标为局部游标和全局游标。所声明的游标为局部游标和全局游标。(2 2)FORWARD_ONLYFORWARD_ONLY选项声明只进游标,即选项声明只进游标,即FETCHFETCH语句语句中只能使用中只能使用NEXTNEXT选项。选项。(3 3)STATICSTATIC与与SQL-92SQL-92声明中的声明中的INSENTIVEINSENTIVE关键字的功能相关键字的功能相同,它将游标声明为静态游标,禁止应用程序通过它修改同,它将游标声明为静态游标,禁止应用程序通过它修改基表数据。基表数据。(4 4)DYNAMICDYNAMIC将游标声明为动态游标,也就是说,其结将游标声明为动态游标,也就是说,其结果结合是动态变化的,能够随时反映用户已提交的更改结果结合是动态变化的,能够随时反映用户已提交的更改结果。提取动态游标数据时,不能使用果。提取动态游标数据时,不能使用ABSOLUTEABSOLUTE提取选项定提取选项定位游标指针。位游标指针。(5 5)KEYSETKEYSET关键字声明键集驱动游标,键集游标中的数关键字声明键集驱动游标,键集游标中的数据行及其顺序是固定的。据行及其顺序是固定的。2024年年7月月5日日10.1 游标申明10.1.1 10.1.1 游标申明(游标申明(2 2)(6 6)FAST_FORWARDFAST_FORWARD指出起用优化的指出起用优化的FORWARD_ONLYFORWARD_ONLY和和READ_ONLYREAD_ONLY游标。游标。(7 7)SCROLL_LOCKSSCROLL_LOCKS选项要求选项要求SQL ServerSQL Server在将数据读入在将数据读入游标的同时锁定基表中的数据行,以确保以后能够通过游游标的同时锁定基表中的数据行,以确保以后能够通过游标成功地对基表进行定位删除和修改操作。标成功地对基表进行定位删除和修改操作。(8 8)OPTIMISTICOPTIMISTIC说明在填充游标时不锁定基表中的数据说明在填充游标时不锁定基表中的数据行。行。(9 9)TYPE_WARNINGTYPE_WARNING指出在声明游标过程中,如果无法指出在声明游标过程中,如果无法建立用户指定类型的游标而隐式转换为另一类型时,给客建立用户指定类型的游标而隐式转换为另一类型时,给客户端发出警告消息。户端发出警告消息。(1010)FOR UPDATEOF FOR UPDATEOF,定义游标内可定义游标内可更新的列。如果提供了更新的列。如果提供了 OF OF,,则只允许,则只允许修改列出的列。如果在修改列出的列。如果在 UPDATE UPDATE 中未指定列的列表,除非指中未指定列的列表,除非指定了定了 READ_ONLY READ_ONLY 并发选项,否则所有列均可更新。并发选项,否则所有列均可更新。2024年年7月月5日日10.1 游标声明10.1.1 10.1.1 游标声明(游标声明(2 2)【例10-2】下面的语句声明游标学生表_cur2。DECLARE DECLARE 学生表学生表_cur2 CURSOR_cur2 CURSORLOCAL SCROLL DYNAMICLOCAL SCROLL DYNAMICTYPE_WARNINGTYPE_WARNINGFOR SELECT FOR SELECT 学号学号,姓名姓名,性别性别,籍贯籍贯,所在院系所在院系,累计学分累计学分 FROM FROM 学生表学生表 WHERE WHERE 专业专业=计算机计算机 2024年年7月月5日日10.1 游标声明10.1.1 10.1.1 游标声明(游标声明(2 2)3 3查看游标信息和状态查看游标信息和状态在在Transact_SQLTransact_SQL程序中,执行以下系统存储过程和函程序中,执行以下系统存储过程和函数能够检索游标属性信息和状态信息:数能够检索游标属性信息和状态信息:sp_cursor_listsp_cursor_list:检索当前连接所有可见游标:检索当前连接所有可见游标sp_describe_cursorsp_describe_cursor:检索游标属性信息,如作用域、:检索游标属性信息,如作用域、名称、类型、状态和行数。名称、类型、状态和行数。sp_describe_cursor_columnssp_describe_cursor_columns:检索游标结果集合中:检索游标结果集合中的列属性。的列属性。sp_describe_cursor_tablessp_describe_cursor_tables:检索游标锁引用的基表:检索游标锁引用的基表信息。信息。2024年年7月月5日日CURSOR_STATUSCURSOR_STATUS:读取游标状态或检查游标变量是否:读取游标状态或检查游标变量是否与游标相关联。与游标相关联。FETCH_STATUSFETCH_STATUS:读取最后一次游标数据提取操作结:读取最后一次游标数据提取操作结果状态。果状态。0 0:取操作成功;:取操作成功;-1-1:取操作失败,所指:取操作失败,所指定的位置超出了范围;定的位置超出了范围;-2-2:要取的行不在记录集内,:要取的行不在记录集内,已从集合中删除。已从集合中删除。CURSOR_ROWSCURSOR_ROWS:显示游标集合中的行数。:显示游标集合中的行数。-n-n:正在向:正在向游标中载入数据,反映的是结果集当前的数据行数;游标中载入数据,反映的是结果集当前的数据行数;n n:结果集合的行数;:结果集合的行数;0 0:结果集中没有匹配的行;:结果集中没有匹配的行;-1-1:指出游标是动态的。:指出游标是动态的。11 2024年年7月月5日日1.1.2 游标变量游标变量声明的格式:游标变量声明的格式:DECLARE cursor_variable_name CURSORDECLARE cursor_variable_name CURSOR游标变量声明后,必须和某个游标相关联才能实现游标操作。游标变量声明后,必须和某个游标相关联才能实现游标操作。有两种方法建立游标和游标变量之间的关联:有两种方法建立游标和游标变量之间的关联:122024年年7月月5日日1.1.2 游标变量 第一种:第一种:先声明游标和游标变量,之后用先声明游标和游标变量,之后用SETSET语句将游标赋给游标语句将游标赋给游标变量。变量。例如:例如:DECLARE cur_var CURSORDECLARE cur_var CURSOR DECLARE C1 CURSOR DECLARE C1 CURSOR FOR SELECT*FROM COURSE FOR SELECT*FROM COURSE SET cur_var=C1 SET cur_var=C12024年年7月月5日日1.1.2 游标变量第二种:第二种:不声明游标,直接在不声明游标,直接在SETSET语句中将各种游标定义赋给游标变量语句中将各种游标定义赋给游标变量例如:例如:DECLARE cur_var CURSORDECLARE cur_var CURSOR SET cur_var=CURSOR SET cur_var=CURSOR FOR SELECT*FROM COURSE FOR SELECT*FROM COURSE当游标变量与游标相关联之后,在当游标变量与游标相关联之后,在Transact-SQLTransact-SQL游标语句中就游标语句中就可以使用游标变量代替游标名,实现各种操作。可以使用游标变量代替游标名,实现各种操作。例如:例如:OPEN cur_varOPEN cur_var2024年年7月月5日日10.2 10.2 游标数据操作游标数据操作 10.2.1 打开游标打开游标在声明以后,如果要从游标中读取数据必须打开打开游标在声明以后,如果要从游标中读取数据必须打开游标。打开一个游标。打开一个Transact-SQLTransact-SQL服务器游标使用服务器游标使用OPENOPEN命令。命令。语法格式:语法格式:OPEN GLOBAL OPEN GLOBAL|参数说明:参数说明:(1 1)GLOBALGLOBAL 定义游标为一全局游标。定义游标为一全局游标。(2 2)游标名)游标名 如果一个全局游标和一个局部游标都使用同一个游标如果一个全局游标和一个局部游标都使用同一个游标名,则如果使用名,则如果使用GLOBALGLOBAL便表明其为全局游标,否则表明其为局便表明其为全局游标,否则表明其为局部游标。部游标。(3 3)游标变量)游标变量 为定义的游标变量。当打开一个游标后时,为定义的游标变量。当打开一个游标后时,MS SQL MS SQL SERVERSERVER首先检查声明游标的语法是否正确,如果游标声明中有首先检查声明游标的语法是否正确,如果游标声明中有变量,则将变量值带入。变量,则将变量值带入。152024年年7月月5日日10.2.1 打开游标 在游标被成功打开之后,在游标被成功打开之后,CURSOR_ROWS CURSOR_ROWS 全局变量将用全局变量将用来记录游标内数据行数。为了提高性能,来记录游标内数据行数。为了提高性能,MS SQL SERVERMS SQL SERVER允允许以异步方式从基础表向许以异步方式从基础表向KEYSETKEYSET或静态游标读入数据,即或静态游标读入数据,即如果如果MS SQL SERVERMS SQL SERVER的查询优化器估计从基础表中返回给游的查询优化器估计从基础表中返回给游标的数据行已经超过标的数据行已经超过sp_configure cursor thresholdsp_configure cursor threshold参数参数值,则值,则MS SQL SERVERMS SQL SERVER将启动另外一个独立的线程来继续从将启动另外一个独立的线程来继续从基础表中读入符合游标定义的数据行,此时可以从游标中基础表中读入符合游标定义的数据行,此时可以从游标中读取数据进行处理而不必等到所有的符合游标定义的数据读取数据进行处理而不必等到所有的符合游标定义的数据行都从基础表中读入游标。行都从基础表中读入游标。CURSOR_ROWS CURSOR_ROWS 变量存储的正变量存储的正是在调用是在调用CURSOR_ROWSCURSOR_ROWS时,游标已从基础表读入的数据行。时,游标已从基础表读入的数据行。CURSOR_ROWSCURSOR_ROWS的返回值有以下四个,如表的返回值有以下四个,如表10-110-1所示。所示。2024年年7月月5日日表表10-1 CURSOR_ROWS10-1 CURSOR_ROWS变量变量17返回值返回值描描 述述-m表示正在向游标中载入数据,反映的是结果集当前的数据行数表示正在向游标中载入数据,反映的是结果集当前的数据行数-1表示该游标是一个动态游标,由于动态游标反映基础表的所有表示该游标是一个动态游标,由于动态游标反映基础表的所有变化,因此符合游标定义的数据行经常变动,故无法确定变化,因此符合游标定义的数据行经常变动,故无法确定0表示无符合条件的记录或游标已关闭表示无符合条件的记录或游标已关闭n表示从基础表读入数据已经结束,表示从基础表读入数据已经结束,n即为游标中结果集的行数即为游标中结果集的行数2024年年7月月5日日10.2.2 读取游标数据 当游标被成功打开以后,就可以从游标中逐行地读取数当游标被成功打开以后,就可以从游标中逐行地读取数据,以进行相关处理。从游标中读取数据主要使用据,以进行相关处理。从游标中读取数据主要使用FETCH FETCH 命令。命令。格式:格式:FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTEn|nvar|FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTEn|nvar|RELATIVE n|nvar FROM RELATIVE n|nvar FROM GLOBAL GLOBAL|cursor_variable_name|cursor_variable_name INTO INTO,2 2024年年7月月5日日 参数说明:参数说明:(1 1)NEXTNEXT说明如果是在说明如果是在OPENOPEN后第一次执行后第一次执行FETCHFETCH命令,则返回命令,则返回结果集的第一行,否则使游标(指针)指向结果集的下一行;结果集的第一行,否则使游标(指针)指向结果集的下一行;NEXTNEXT是默认的选项,也是最常用的一种方法是默认的选项,也是最常用的一种方法(2 2)PRIORPRIOR、FIRSTFIRST、LASTLAST、ABSOLUTE n|nvarABSOLUTE n|nvar、RELATIVE RELATIVE n|nvarn|nvar等各项,只有在定义游标时使用了等各项,只有在定义游标时使用了SCROLLSCROLL选项才可以选项才可以使用;使用;PRIORPRIOR是返回结果集当前行的前一行;如果是返回结果集当前行的前一行;如果FETCH FETCH PRIORPRIOR是第一次读取游标中数据,则无数据记录返回,并把游是第一次读取游标中数据,则无数据记录返回,并把游标位置设为第一行。标位置设为第一行。FIRSTFIRST是返回结果集的第一行;是返回结果集的第一行;LASTLAST是返回结果集的最后一行;是返回结果集的最后一行;192024年年7月月5日日 ABSOLUTE n|nvar ABSOLUTE n|nvar 如果如果n n或或nvarnvar为正为正数,则返回游标结果集中的第数,则返回游标结果集中的第n n或或nvarnvar行数据。行数据。如果如果n n或或nvar nvar 为负数,则返回结果集内倒数第为负数,则返回结果集内倒数第n n或或nvar nvar 行数据。若行数据。若n n或或nvarnvar超过游标的数据子超过游标的数据子集范畴,则集范畴,则FETCH_STARSFETCH_STARS返回返回-1-1,在该情况下,在该情况下,如果如果n n或或nvarnvar为负数,则执行为负数,则执行FETCH NEXTFETCH NEXT命令会命令会得到第一行数据,如果得到第一行数据,如果n n或或nvarnvar为正值,执行为正值,执行FETCH PRIORFETCH PRIOR命令则会得到最后一行数据。命令则会得到最后一行数据。n n或或nvar nvar 可以是一固定值也可以是一可以是一固定值也可以是一smallint,smallint,tinyint tinyint 或或intint类型的变量。类型的变量。202024年年7月月5日日RELATIVE RELATIVE n n|nvar nvar 若若n n或或nvarnvar为为正正数数,则则读读取取游游标标当当前前位位置置起起向向后后的的第第n n或或nvarnvar行行数数据据;如如果果n n或或nvarnvar为为负负数数,则则读读取取游游标标当当前前位位置置起起向向前前的的第第n n或或nvarnvar行行数数据据。若若n n或或nvarnvar超超过过游游标标的的数数据据子子集集范范畴畴,则则FETCH_STARS FETCH_STARS 返返回回-1-1,在在该该情情况况下下,如如果果n n或或nvarnvar为为负负数数,则则执执行行FETCH FETCH NEXTNEXT命命令令则则会会得得到到第第一一行行数数据据;如如果果n n或或nvarnvar为为正正值值,执执行行FETCH FETCH PRIORPRIOR命命令令则则会会得得到到最最后后一一行行数数据据。n n 或或nvarnvar可可以以是是一一固固定定值值也也可可以以是是一一smallint,tinyintsmallint,tinyint或或intint类型的变量。类型的变量。212024年年7月月5日日22返返 回回 值值描描 述述0FETCH命令被成功执行。命令被成功执行。-1FETCH命令失败或所指定的范围超出了范围。命令失败或所指定的范围超出了范围。-2要取的行不在记录集内,已从集合中删除要取的行不在记录集内,已从集合中删除 表表10-2 FETCH_STATUS变量变量2024年年7月月5日日10.2.3 关闭游标在处理完游标中数据之后必须关闭游标来释放数据结果集和定在处理完游标中数据之后必须关闭游标来释放数据结果集和定位于数据记录上的锁,有两种方法关闭游标。位于数据记录上的锁,有两种方法关闭游标。1 1使用使用CLOSECLOSE命令关闭游标命令关闭游标格式:格式:CLOSE GLOBAL CLOSE GLOBAL 游标名游标名|游标变量游标变量 说明:说明:CLOSECLOSE语句关闭游标,但不释放游标占用的数据结构,语句关闭游标,但不释放游标占用的数据结构,应用程序可以再次执行应用程序可以再次执行OPENOPEN语句打开和填充游标。语句打开和填充游标。2 2自动关闭游标自动关闭游标 游标可应用在存储过程、触发器和游标可应用在存储过程、触发器和Transact_SQLTransact_SQL脚本中。脚本中。如果在声明游标与释放游标之间使用了事务结构,则在结如果在声明游标与释放游标之间使用了事务结构,则在结束事务时游标会自动关闭。束事务时游标会自动关闭。2024年年7月月5日日例如以下执行过程:例如以下执行过程:(1 1)声明一个游标)声明一个游标(2 2)打开游标)打开游标(3 3)读取游标)读取游标(4 4)BEGIN TRANSATIONBEGIN TRANSATION(5 5)数据处理)数据处理(6 6)COMMIT TRANSATIONCOMMIT TRANSATION(6 6)回到步骤)回到步骤(3)(3)242024年年7月月5日日 10.2.4 10.2.4 释放游标释放游标当当CLOSECLOSE命令关闭游标时,并没有释放游标占用命令关闭游标时,并没有释放游标占用的数据结构。因此要使用的数据结构。因此要使用DEALLOCATEDEALLOCATE命令,删除命令,删除掉游标与游标名或游标变量之间的联系,并且释掉游标与游标名或游标变量之间的联系,并且释放游标占用的所有系统资源。放游标占用的所有系统资源。语法格式:语法格式:DEALLOCATE GLOBAL DEALLOCATE GLOBAL 游标名游标名|游标变量游标变量 252024年年7月月5日日26参数说明:参数说明:(1)对游标进行操作的语句使用游标名称或游标变)对游标进行操作的语句使用游标名称或游标变量引用游标。量引用游标。DEALLOCATE删除游标与游标名称或删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。何资源也随之释放。(2)DEALLOCATE游标变量游标变量语句只删除对游标命语句只删除对游标命名变量的引用。直到批处理、存储过程或触发器结束名变量的引用。直到批处理、存储过程或触发器结束时变量离开作用域,才释放变量。在时变量离开作用域,才释放变量。在DEALLOCATE cursor_variable_name 语句之后,可以使用语句之后,可以使用SET语语句使变量与另一个游标关联。句使变量与另一个游标关联。2024年年7月月5日日例如:例如:USE USE 教学管理教学管理GOGODECLARE MyCursor CURSORDECLARE MyCursor CURSORSET MyCursor=CURSOR LOCAL SCROLL FORSET MyCursor=CURSOR LOCAL SCROLL FORSELECT*FROM SELECT*FROM STUDENTSTUDENT-下面语句释放游标及游标占用的资源下面语句释放游标及游标占用的资源DEALLOCATE MyCursorDEALLOCATE MyCursor-用用SETSET命令将游标变量命令将游标变量MyCursorMyCursor同另一个游标关联同另一个游标关联SET MyCursor=CURSOR LOCAL SCROLL FORSET MyCursor=CURSOR LOCAL SCROLL FORSELECT*FROM COURSESELECT*FROM COURSEGOGO272024年年7月月5日日10.2.5 游标定位修改和删除操作 如果在声明游标时使用了如果在声明游标时使用了FOR UPDATEFOR UPDATE语句,那么语句,那么就可以在就可以在UPDATEUPDATE或或DELETEDELETE命令中以命令中以WHERE CURRENT OFWHERE CURRENT OF关键字直接修改或删除当前游标中当前行的数据。当关键字直接修改或删除当前游标中当前行的数据。当改变游标中数据时,这种变化会自动地影响到游标的改变游标中数据时,这种变化会自动地影响到游标的基础表。但是如果在声明游标时选择了基础表。但是如果在声明游标时选择了INSENSITIVEINSENSITIVE选项时,该游标中的数据不能被修改,具体含义请参选项时,该游标中的数据不能被修改,具体含义请参看声明游标一节中对看声明游标一节中对INSENSITIVEINSENSITIVE选项的详细解释。选项的详细解释。282024年年7月月5日日10.2.5 游标定位修改和删除操作语法格式:语法格式:游标定位修改游标定位修改UPDATEUPDATE语句的格式如下语句的格式如下UPDATE UPDATE 表名表名 SET SET 子句子句 WHERE CURRENT OF GLOBAL WHERE CURRENT OF GLOBAL 游标名游标名|游标变量游标变量 游标定位删除游标定位删除DELETEDELETE语句的格式为如下语句的格式为如下DELETE FROM DELETE FROM 表名表名 WHERE CURRENT OF GLOBAL WHERE CURRENT OF GLOBAL 游标名游标名|游标变量游标变量 2024年年7月月5日日10.3 游标应用实例分析【例10-6】使用游标逐个检查并修改每个开课号在选课表中的学生选修人数,并显示输出。SET NOCOUNT ONSET NOCOUNT ONDECLARE DECLARE 开课号开课号 CHAR(6),CHAR(6),限选人数限选人数 INT,INT,已选人数已选人数 INT INTDECLARE message CHAR(80)DECLARE message CHAR(80)-创建包含开课号、限选人数和已选人数信息的游标创建包含开课号、限选人数和已选人数信息的游标CUR_CUR_选课人数。选课人数。DECLARE CUR_DECLARE CUR_选课人数选课人数 cursor FOR SELECT cursor FOR SELECT 开课号开课号,限选人数限选人数FROM FROM 开课表开课表 FOR UPDATE OF FOR UPDATE OF 已选人数已选人数-打开游标,根据开课表依次提取每个开课计划的数据。打开游标,根据开课表依次提取每个开课计划的数据。OPEN CUR_OPEN CUR_选课人数选课人数FETCH NEXT FROM CUR_FETCH NEXT FROM CUR_选课人数选课人数 INTO INTO 开课号开课号,限选人数限选人数WHILE fetch_status=0WHILE fetch_status=0302024年年7月月5日日10.3 游标应用实例分析【例10-6】续BEGINBEGIN-显示开课号、限选人数。显示开课号、限选人数。SELECT SELECT message=message=开开课课号号+开开课课号号+限限选选人人数数+CONVERT(CHAR(2),CONVERT(CHAR(2),限选人数限选人数)PRINT messagePRINT message-在选课表中计算该开课号的选课人数。在选课表中计算该开课号的选课人数。SELECT SELECT 已已选选人人数数=COUNT(*)=COUNT(*)FROM FROM 选选课课表表 WHERE WHERE 开开课课号号=开开课号课号PRINT PRINT 已选人数已选人数+CONVERT(CHAR(2),+CONVERT(CHAR(2),已选人数已选人数)-返返回回到到游游标标CUR_CUR_选选课课人人数数,根根据据计计算算出出的的累累计计学学分分修修改改该该生生的原累计学分。的原累计学分。2024年年7月月5日日10.3 游标应用实例分析例10-6】续IF IF 已选人数已选人数=限选人数限选人数UPDATE UPDATE 开课表开课表SET SET 已选人数已选人数=已选人数已选人数WHERE CURRENT OF CUR_WHERE CURRENT OF CUR_选课人数选课人数ELSEELSEPRINT PRINT 这个开课计划选择的人数已经超过限选人数请调整!这个开课计划选择的人数已经超过限选人数请调整!FETCH NEXT FROM CUR_FETCH NEXT FROM CUR_选课人数选课人数 INTO INTO 开课号开课号,限选人数限选人数ENDENDCLOSE CUR_CLOSE CUR_选课人数选课人数DEALLOCATE CUR_DEALLOCATE CUR_选课人数选课人数2024年年7月月5日日小 结 游标是系统为用户开设的一个数据缓冲区,存放游标是系统为用户开设的一个数据缓冲区,存放SQLSQL语句的执行结果,每个游标区都有一个名字。用户可以语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并在应用程序当中进行单个处通过游标逐一获取记录,并在应用程序当中进行单个处理。游标通过以下方式对理。游标通过以下方式对SQLSQL语句结果集进行处理:语句结果集进行处理:允许定位在结果集的特定行。允许定位在结果集的特定行。从结果集的当前位置检索一行或多行。从结果集的当前位置检索一行或多行。支持对结果集中当前位置的行进行数据修改。支持对结果集中当前位置的行进行数据修改。为由其他用户对显示在结果集中的数据库数据所做的为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。更改提供不同级别的可见性支持。提供脚本、存储过程和触发器中使用的访问结果集中提供脚本、存储过程和触发器中使用的访问结果集中的数据的的数据的Transact-SQLTransact-SQL语句。语句。332024年年7月月5日日34Thank you very much!谢谢谢谢您您的的光光临临!下一章下一章 2024年年7月月5日日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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