存储过程与触发器的应用实验报告(存储过程及触发器的实验报告)
存储过程与触发器的应用实验报告(存储过程及触发器的实验报告)EXECUTE proStudentByNo21 '0800001' @sName OUTPUT @avg OUTPUTDECLARE @sNamevarchar(20) @avg numeric(5 1)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(
实验目的:进一步了解关于存储过程和触发器的定义及实现
实验名称:存储过程、触发器的定义以及验证
实验内容:完成以下关于存储过程和触发器的定义以及验证。
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值是否有变化。