游标的原理
declare <游标名> cursor for <select语句>;
open <游标名>;
fetch <游标名> into <变量1>,<变量2>...
close <游标名>;
在Course表中增加一门课程,若已存在该课程即退出;若不存在即为某个指定系的学生增加选修这门课程,返回选修人数。
/*自定义变量@totalcno,@snotemp,@rec;输入变量@newCourse,@dept*/
create proc addCourse(@newCourse char(40),@dept char(20))
as
declare @totalcno char(4);
declare @snotemp char(5);
declare @rec int;
BEGIN
if exists(select * from course where cname=@newCourse)
return
/*不存在*/
else
select @totalcno=MAX(cno) from course; /*找出最大课程编号*/
set @totalcno=@totalcno+1;
insert into course values(@totalcno,@newCourse,null,null); /*插入课程*/
declare SX cursor for
select sno from student where sdept=@dept; /*使用游标*/
open SX;
FETCH SX INTO @snotemp; /*推进游标*/
while @@fetch_status=0 /*判断0 FETCH 语句成功。 -1 FETCH 语句失败或此行不在结果集中。 -2 被提取的行不存在。 */
BEGIN
insert into sc values(@snotemp,@totalcno,null);
FETCH NEXT FROM SX INTO @snotemp;
end
close SX;
select @rec=COUNT(*) from sc where cno=@totalcno; /*返回选课人数*/
print @rec;
end