万常选版数据库系统原理与设计第9章课后习题答案(2)

2018-12-27 18:42

FROM Score,Course WHERE studentNo IN( SELECT studentNo FROM Student

WHERE classNo IN( SELECT classNo FROM Class

WHERE institute=@institute )

) AND Score.courseNo=Course.courseNo GROUP BY courseName OPEN curCourse

FETCH curCourse INTO @courseName,@count,@avg WHILE(@@FETCH_STATUS=0) BEGIN

--将学院名称、课程名称、课程选课人数和课程平均分插入到临时表#myTemp中 INSERT INTO #myTemp VALUES(@institute,@courseName,@count,@avg) --获取下一个游标值,取该学院下一门课程的课程名、选课人数和平均分 FETCH curCourse INTO @courseName,@count,@avg END

CLOSE curCourse

DEALLOCATE curCourse

--获取游标curInstitute的下一个值,即取下一个学院 FETCH curInstitute INTO @institute END

CLOSE curInstitute

DEALLOCATE curInstitute

--显示临时表的内容,同时将临时表的内容返回给调用者 SELECT * FROM #myTemp Order BY institute END GO

--EXEC PROC3

--DROP PROCEDURE PROC3

--2) 使用游标作为OUTPUT参数的方法: --将游标使用成O

UTPUT参数。游标可以使用OUTPUT(输出)参数,但不能使用成输入参数。

--也就是说,游标可以作为结果返回,但却不能传输到过程中去。当游标被用作参数时, --需要限定其为OUTPUT和VARYING。VARYING关键字指出该结果集要用来支持输出参数。 --这样就提供了将结果集返回到调用过程的能力。 --例如:

CREATE PROCEDURE PROC3(@institute_cursor CURSOR VARYING OUTPUT) AS

SET @institute_cursor = CURSOR FOR

SELECT institute, courseName, COUNT(*), AVG(score) FROM Class,Student,Score,Course WHERE Class.classNo=Student.classNo AND Student.studentNo=Score.studentNo AND Score.courseNo=Course.courseNo GROUP BY institute,courseName ORDER BY institute OPEN @institute_cursor GO

--DECLARE @MyCursor CURSOR;

--EXEC PROC3 @institute_cursor = @MyCursor OUTPUT; --WHILE (@@FETCH_STATUS = 0) --BEGIN

-- FETCH NEXT FROM @MyCursor; --END;

--CLOSE @MyCursor;

--DEALLOCATE @MyCursor; --GO

--(4) 不允许使用聚集函数,统计每门课程的选课人数和平均分,按如下格式输出。 --课程名 1:xxxxxx

--学号 姓名 成绩 --xxxxxx xxxxxx xxxx --... ... ... --选课人数:xxx --平均分:xxx.xx

-------------------------------------------------- --课程名 2:xxxxxx

--学号 姓名 成绩 --xxxxxx xxxxxx xxxx --... ... ... --选课人数:xxx --平均分:xxx.xx

-------------------------------------------------- CREATE PROCEDURE PROC4 AS BEGIN

SET NOCOUNT ON

DECLARE @courseNo char(3),@courseName varchar(30) DECLARE @n tinyint=0

DECLARE curCourse CURSOR FOR

SELECT courseNo,courseName FROM Course OPEN curCourse

FETCH curCourse INTO @courseNo,@courseName WHILE(@@FETCH_STATUS=0) BEGIN

SET @n=@n+1

PRINT '课程名' + STR(@n,2) + ':' + @courseName PRINT '学号 姓名 成绩'

DECLARE @studentNo char(7),@studentName varchar(20),@score numeric(5,1) DECLARE @count tinyint=0,@sum numeric(5,1)=0,@avg numeric(5,1)=0 DECLARE curScore CURSOR FOR

SELECT Student.studentNo,studentName,score FROM Student,Score

WHERE courseNo=@courseNo

AND Student.studentNo=Score.studentNo OPEN curScore

FETCH curScore INTO @studentNo,@studentName,@score WHILE(@@FETCH_STATUS=0) BEGIN

PRINT CONVERT(char(10),@studentNo) + CONVERT(char(10),@studentName) CONVERT(char(10),@score)

SET @sum=@sum+@score SET @count=@count+1

FETCH curScore INTO @studentNo,@studentName,@score END

CLOSE curScore

DEALLOCATE curScore

IF @count!=0 SET @avg=@sum/@count

PRINT '选课人数:' + CONVERT(char(3), @count) PRINT '平均分:' + CONVERT(char(5), @avg)

PRINT '-------------------------------------------' FETCH curCourse INTO @courseNo,@courseName END

CLOSE curCourse

DEALLOCATE curCourse END GO

--EXEC PROC4

+


万常选版数据库系统原理与设计第9章课后习题答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三星电视机模具标准

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: