数据库实验报告六_存储过程

  • 格式:docx
  • 大小:229.53 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HUNAN UNIVERSITY

数据库

实验报告

学生姓名

学生学号

专业班级

指导老师

2017 年5月24日

SELECT COUNT(*)INTO more90 FROM sc

WHERE cno = countcno AND grade >= 90;

/*将结果存入新表sumScore中*/

create table sumScore( scorestage char(10), number smallint);

insert into sumScore values('x<60', less60);

insert into sumScore values('60<=x<70', b60a70);

insert into sumScore values('70<=x<80', b70a80);

insert into sumScore values('80<=x<90', b80a90);

insert into sumScore values('x>=90', more90);

END$$

call sumScore(); /*调用上述存储过程*/

首先创建存储过程,然后再调用存储过程。结果如下:

(上述结果图截自Navicat软件)

可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。

2、统计任意一门课的平均成绩。

代码如下:

DELIMITER $$

CREATE PROCEDURE `scoreAvg`()

BEGIN

declare curname char(40) default null; /*临时存放课程名*/

declare curcno char(4) default null; /*临时存放课程号*/

declare curavg float; /*临时存放平均成绩*/

declare mycursor cursor for /*定义游标*/

select cno, cname from course;

declare continue handler for not found set curavg=-1;

open mycursor; /*打开游标*/

fetch mycursor into curcno,curname; /*从结果集中取第一条记录到临时变量中*/ repeat /*重复取记录*/

select avg(grade) into curavg from sc where cno = curcno;

insert into scoreAvg values(curcno,curname,curavg); /*将结果存入新表scoreAvg中*/ fetch mycursor into curcno,curname;

until curavg=-1

end repeat;

close mycursor; /*关闭游标*/

END$$

call scoreAvg(); /*调用上述存储过程*/

首先创建存储过程,然后再调用存储过程。结果如下:

可以看到,在stuinfo中新建了一个基本表scoreavg,表中内容是各课程的平均成绩。

3、将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。

代码如下:

DELIMITER $$

CREATE PROCEDURE `changeRank`()/*改变成绩等级*/

BEGIN

declare chgrade char(1) default null; /*临时存放新的成绩等级*/

declare curcno smallint(6); /*临时存放课程号*/

declare curgrade int; /*临时存放成绩*/

declare flag int default 0;

declare mycursor cursor for

select cno,grade from sc; /*定义游标*/

declare continue handler for not found set flag=-1;

/*在sc表中新建一列,用于存放新的成绩等级*/

alter table sc add column(newgrade char(1));

open mycursor; /*打开游标*/

fetch mycursor into curcno,curgrade;

repeat /*当游标打开时进行下列循环处理*/

if curgrade < 60 then

set chgrade = 'E';

elseif curgrade < 70 then

set chgrade = 'D';

elseif curgrade < 80 then

set chgrade = 'C';

elseif curgrade < 90 then

set chgrade = 'B';

else

set chgrade = 'A';

end if;

update sc set newgrade=chgrade where cno=curcno and grade=curgrade;

fetch mycursor into curcno,curgrade;

until flag=-1 /*直到游标指向空记录*/

end repeat;

close mycursor; /*关闭游标*/

select * from sc;

END$$

SET SQL_SAFE_UPDATES=0; /*此步骤是必要的,否则将无法修改sc表*/

call changeRank(); /*调用上述存储过程*/

alter table sc

drop column newgrade;/*在调用该存储过程前,需要先执行此语句,因为在创建存储过程时已经在sc表中添加了这个属性*/

首先创建存储过程,然后再调用存储过程,结果如下: