数据库实验报告六-存储过程_第1页
数据库实验报告六-存储过程_第2页
数据库实验报告六-存储过程_第3页
数据库实验报告六-存储过程_第4页
数据库实验报告六-存储过程_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业HUNAN UNIVERSITY数据库实验报告学生姓名 学生学号 专业班级 指导老师 2017 年5月 24日数据库系统概论实验报告(六)题目:PL/SQL存储过程姓名:Nomad日期:2017.5.24实验环境硬件:联想笔记本电脑操作系统:Windows 7旗舰版应用软件:MySQL 6.3,Navicat Preminum 11.2.16实验内容熟悉使用存储过程来进行数据库应用程序的设计。统计离散数学的成绩分布情况,即按照各分数段统计人数。代码如下:DELIMITE

2、R $ CREATE PROCEDURE sumScore() /*统计课程离散数学 各分数段人数*/BEGIN declare less60 smallint default 0; /*90*/ declare countcno char(4) default *; SELECT Cno INTO countcno FROM course WHERE cname = 数学; /*确保course表中有数学这门课*/ SELECT COUNT(*) INTO less60 FROM sc WHERE cno = countcno AND grade = 60 AND grade = 70 AN

3、D grade = 80 AND grade = 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values(x60, less60); insert into sumScore values(60=x70, b60a70); insert into sumScore values(70=x80, b70a80); insert into sumScore values(80=x=90, more90);END$call su

4、mScore(); /*调用上述存储过程*/首先创建存储过程,然后再调用存储过程。结果如下:(上述结果图截自Navicat软件)可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。统计任意一门课的平均成绩。代码如下:DELIMITER $ CREATE PROCEDURE scoreAvg()BEGIN declare curname char(40) default null; /*临时存放课程名*/declare curcno char(4) default null; /*临时存放课程号*/declare curavg float; /*

5、临时存放平均成绩*/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 score

6、Avg values(curcno,curname,curavg); /*将结果存入新表scoreAvg中*/fetch mycursor into curcno,curname;until curavg=-1end repeat; close mycursor; /*关闭游标*/END$call scoreAvg(); /*调用上述存储过程*/首先创建存储过程,然后再调用存储过程。结果如下:可以看到,在stuinfo中新建了一个基本表scoreavg,表中内容是各课程的平均成绩。将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。代码如下:DELIMITER $ CREATE PROC

7、EDURE 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=

8、-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 th

9、en 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 scdrop column newgrade; /*在调用该存储过程前,需要先执行此语句,因为在创建存储过程时已经在sc表中添加了这个属性*/首先创建存储过程,然后再调用存储过程,结果如下:可以看到,各成绩被赋予了新的等级。出现的问题与解决方案语句格式不正确。一开始按照课本上的格式来创建存储过程,结果无论是在MySQL还是Postgresql上都报语法错误,后来经网上查阅资料,按照MySQL的标准格式对代码进行修改后,可以执行。2、在本次实验中,创建的存储过程都是不带参数的,因此创

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论