11.1游标的基本概念 ■游标:每次处理 SELECT语句返回的结果集的一行 或部分行,遍历程序 游标支持以下功能: ①在结果集中定位特定行; ②从结果集的当前位置检索行; ③支持对结果集中当前位置的行进行数据修改
11.1 游标的基本概念 游标:每次处理SELECT语句返回的结果集的一行 或部分行,遍历程序。 游标支持以下功能: ①在结果集中定位特定行; ②从结果集的当前位置检索行; ③支持对结果集中当前位置的行进行数据修改
11.2游标的建立及使用 ■游标建立及使用的步骤: 1、使用 DECLARE CURS0R语句声明一个游标; DECLARE游标名 CURSOR FOR 查询语句 [ FOR READ ONLY UPDATE OF列名称] 2、使用OPEN语句执行游标 OPEN游标名
11.2 游标的建立及使用 游标建立及使用的步骤: 1、使用DECLARE CURSOR语句声明一个游标; DECLARE 游标名 CURSOR FOR 查询语句 [ FOR READ ONLY |UPDATE OF 列名称 ] 2、使用OPEN语句执行游标 OPEN 游标名
3、使用 FETCH语句,从结果集中检索单独行 FETCH NEXT PRIOR FIRST LAST FROM 游标名 [INT0变量名, 4、使用 UPDATE或 DELETE语句修改行 5、使用 CLOSE语句关闭游标,结束动态游标的 操作并释放资源,可用OPEN再次打开。 CLOSE游标名 6、使用 DEALLOCATE语句从当前的会话中移除游 标的引用,不能用0PEN打, 花使用 DECLARE从新声明 DEALLOCATE游标名
3、使用FETCH语句,从结果集中检索单独行 FETCH [ NEXT | PRIOR | FIRST | LAST ] FROM 游标名 [ INTO 变量名,…… ] 4、使用UPDATE或DELETE语句修改行 5、使用CLOSE语句关闭游标,结束动态游标的 操作并释放资源,可用OPEN再次打开。 CLOSE 游标名 6、使用DEALLOCATE语句从当前的会话中移除游 标的引用,不能用OPEN打开,只能使用 DECLARE从新声明。 DEALLOCATE 游标名
■@ @FETCH STATUS—一游标状态变量 0 FETCH语句成功 -1 FETCH语句失眠或此行不在结果集中 2被提取的行不存在
@@FETCH_STATUS——游标状态变量 ▲ 0 FETCH语句成功 ▲ -1 FETCH语句失眠或此行不在结果集中 ▲ -2 被提取的行不存在
例1、声明一游标,从 Course表中检索所有记录 ■ USE XK dEclare Crs Course CURSOR FOR SELECt FROM Course ORDER BY Couno ■ oPen Crs course FETCH NEXt FROm CrsCourse uPdatE Course set LimitNum=22 WHERE CURRENT OF Crs Course ClOSE Crs Course DEALLOCATE Crs Course
例1、声明一游标,从Course表中检索所有记录。 USE Xk DECLARE CrsCourse CURSOR FOR SELECT * FROM Course ORDER BY CouNo OPEN CrsCourse FETCH NEXT FROM CrsCourse UPDATE Course SET LimitNum=22 WHERE CURRENT OF CrsCourse CLOSE CrsCourse DEALLOCATE CrsCourse
例2、将值存入变量 ■ USE XK I DECLARE @CouNo varchar(3), @CouName varchar(30 DECLaRE CrsCourse CURSOR FOR seLECt CouNo, couname FROM Course ORDER BY COuNo ■ open Crs course a FEtCH NeXt FRoM Crs Course into @COuNo, @CouName ■ PRINT’课程号:'+@ COuN*’课程名称:’+@ CouName ■ clOSE Crs course dEALlOCatE CrsCourse
例2、将值存入变量 USE Xk DECLARE @CouNo varchar(3),@CouName varchar(30) DECLARE CrsCourse CURSOR FOR SELECT CouNo,CouName FROM Course ORDER BY CouNo OPEN CrsCourse FETCH NEXT FROM CrsCourse INTO @COuNo,@CouName PRINT '课程号:'+@CouNo+'课程名称:'+@CouName CLOSE CrsCourse DEALLOCATE CrsCourse
例3、利用游标遍历,显示整个结果集 USE XK 定义游标 I DECLARE @CouNo varchar(3), @CouName varchar(20 DECLARE CrsCourse cursor ■FOR seleCt CouNo, CouName from Course OrdEr by COuN 打开游标 ■ open Crs course ■一-取得第一条记录 FETCH NEXt FROM Crs Course into COuNo @CouName
例3、利用游标遍历,显示整个结果集 USE Xk --定义游标 DECLARE @CouNo varchar(3),@CouName varchar(20) DECLARE CrsCourse CURSOR FOR SELECT CouNo,CouName FROM Course ORDER BY CouNo --打开游标 OPEN CrsCourse --取得第一条记录 FETCH NEXT FROM CrsCourse INTO @COuNo,@CouName
■—通过判断@ FETCH STATUS进行循环 WHILE @@FETCH STATUS=O ■ BEGIN PRINT’课程号:’+@ CouN+课程名称 +@CouName 取得下一条记录 FETCH NEXT FROM Crs Course INto @CouNo @ CouName ■END ■ ClOSE CrsCourse a DEALLOCATE CrSCourse
--通过判断@@FETCH_STATUS进行循环 WHILE @@FETCH_STATUS=0 BEGIN PRINT '课程号:' + @CouNo+'课程名称:‘ + @CouName --取得下一条记录 FETCH NEXT FROM CrsCourse INTO @CouNo,@CouName END CLOSE CrsCourse DEALLOCATE CrsCourse