前言
数据库课程是需要做些相关知识点的数据库实验报告的,三桥君根据自己所学所做的数据库实验,特地重新整理成教程。这些教程一共有6份,收录到《数据库实验》系列了。
一、实验目的
掌握数据库PL/SQL编程语言,以及数据库存储过程的设计和使用方法。
二、实验内容
存储过程定义,存储过程运行,存储过程的参数传递。掌握PL/SQL编程语言和编程规范,规范设计存储过程。
三、实验数据
已知学生管理系统数据库xsgl,有5个数据表xsgl_user,xsgl_major,xsgl_student,xsgl_course和xsgl_score,分别存储用户、专业、学生、课程和成绩数据,如下图所示。

用SQL语言实现以下:
1、定义存储过程proCourseAvg,该存储过程的功能是根据输入的课程名称,统计该课程的选课人数和平均分,并返回统计结果。
2、定义存储过程proStudentAvg,该存储过程的功能是根据输入的同学学号,统计该同学的平均分,并返回该同学的姓名和平均分。
以上每个存储过程定义后,给出执行结果。
四、实验结果
一、xsgl数据库关系图

二、SQL语言定义存储过程
1、定义存储过程proCourseAvg
--定义存储过程proCourseAvg
CREATEPROCproCourseAvg
@CouName VARCHAR(20),
@CouNum INTOUTPUT,
@AVG INTOUTPUT
AS--SQL语句
SELECT@CouNum=COUNT(xsgl_course.course_no),@AVG=AVG(score_score)
FROMxsgl_course,xsgl_score
WHERExsgl_course.course_no=xsgl_score.course_no
ANDxsgl_course.course_name=@CouName
GROUPBYxsgl_course.course_no

--输出结果1
DECLARE@CouNum INT,@AVG INT
EXECproCourseAvg'C语言',@CouNum OUTPUT,@AVG OUTPUT
PRINT@CouNum
PRINT@AVG

--输出结果2
DECLARE@CouNum INT,@AVG INT
EXECproCourseAvg'Java',@CouNum OUTPUT,@AVG OUTPUT
PRINT@CouNum
PRINT@AVG

--输出结果3
DECLARE@CouNum INT,@AVG INT
EXECproCourseAvg'ASP',@CouNum OUTPUT,@AVG OUTPUT
PRINT@CouNum
PRINT@AVG

2、定义存储过程proStudentAvg
--定义存储过程proStudentAvg
CREATEPROCproStudentAvg
@StuNo VARCHAR(20),
@StuName VARCHAR(20)OUTPUT,
@AVG INTOUTPUT
AS
SELECT@StuName=xsgl_student.stud_name,@AVG=AVG(score_score)
FROMxsgl_student,xsgl_score
WHERExsgl_student.stud_no=xsgl_score.stud_no
ANDxsgl_student.stud_no=@StuNo
--AND @StuName=xsgl_student.stud_name
GROUPBYxsgl_student.stud_name

--输出结果1
DECLARE@StuName VARCHAR(20),@AVG INT
EXECproStudentAvg'101',@StuName OUTPUT,@AVG OUTPUT
PRINT@StuName
PRINT@AVG

--输出结果2
DECLARE@StuName VARCHAR(20),@AVG INT
EXECproStudentAvg'102',@StuName OUTPUT,@AVG OUTPUT
PRINT@StuName
PRINT@AVG

--输出结果3
DECLARE@StuName VARCHAR(20),@AVG INT
EXECproStudentAvg'201',@StuName OUTPUT,@AVG OUTPUT
PRINT@StuName
PRINT@AVG

--输出结果4
DECLARE@StuName VARCHAR(20),@AVG INT
EXECproStudentAvg'202',@StuName OUTPUT,@AVG OUTPUT
PRINT@StuName
PRINT@AVG

--输出结果5
DECLARE@StuName VARCHAR(20),@AVG INT
EXECproStudentAvg'203',@StuName OUTPUT,@AVG OUTPUT
PRINT@StuName
PRINT@AVG

xsgl的数据库源码可以到公众号【三桥君】回复【数据库实验五】领取。