sql存储过程实例详解(存储过程及触发器的实验报告)

sql存储过程实例详解(存储过程及触发器的实验报告)

  实验目的:进一步了解关于存储过程和触发器的定义及实现

  实验名称:存储过程、触发器的定义以及验证

  实验内容:完成以下关于存储过程和触发器的定义以及验证。

  1.[例7.50] 输入某个同学的学号,统计该同学的平均分。

  CREATE PROCEDURE proStudentByNo1(sNo char(7))

  BEGIN

  SELECT a.studentNo, studentName, avg(score)

  FROM Student a, Score b

  WHERE a.studentNo=b.studentNo

  AND a.studentNo=sNo

  GROUP BY a.studentNo, studentName;

  END

  执行该存储过程:call proStudentByNo1('0800001');

  2.输入某个同学的学号,统计该同学的平均分,并返回该同学的姓名和平均分。

  CREATE PROCEDURE proStudentByNo21(@sNo char(7), @sName

  varchar(20) OUTPUT, @avg numeric(5, 1) OUTPUT )

  AS

  BEGIN

  SELECT @sName=studentName

  FROM Student WHERE studentNo=@sNo

  SELECT @avg=avg(score)

  FROM Score WHERE studentNo=@sNo

  GROUP BY studentNo

  END

  执行存储过程proStudentByNo2 1

  DECLARE @sNamevarchar(20), @avg numeric(5, 1)

  EXECUTE proStudentByNo21 '0800001', @sName OUTPUT, @avg OUTPUT

  SELECT @sName, @avg

  把以上SQLServer版本的存储过程改为MYSQL版本并运行

  3. 创建触发器,当输入某个同学选课成绩时,如果他是少数民族人,其成绩自动加5分。

  CREATE TRIGGER ScoreIns BEFORE INSERT

  ON Score FOR EACH ROW

  BEGIN

  UPDATE Student SET NEW.score=NEW.score+5

  WHERE Student.studentNo=NEW.studentNo

  and Student.nation<>'汉族';

  END

  实验步骤:

  首先连接名为scoredbd的数据库,然后新建查询,输入SQL语句,运行。

  1. 输入学号为0800001,统计该同学的平均分。SQL语句及运行结果如下:

  执行存储过程:

  2、输入学号为0800001,统计该同学的平均分,并返回该同学的姓名和平均分。

  3. 创建触发器,当输入某个同学选课成绩时,如果他是少数民族人,其成绩自动加5分。

  (1)往Score表插入一条记录,要求studentNo值所对应学生在Student表的民族为’汉族’,查看Score表中刚才插入的记录的score值是否有变化。

  (2)再往Score表插入一条记录,要求studentNo值所对应学生在Student表的民族为’蒙古族’,查看Score表中刚才插入的记录的score值是否有变化。

推荐阅读