数据库实验——触发器与存储过程

数据库实验——触发器与存储过程

掌握某主流DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE(for)触发器和AFTER触发器;掌握数据库存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。
实验步骤
1、创建一个不带参数的简单存储过程
(1)创建存储过程sp_avggrade,实现查询每门课程学生的平均成绩的功能;

create PROC sp_avggrade
as
begin
    select AVG(grade) from sc group by cno;
end  


(2)调用该存储过程,实现查询。

execute sp_avggrade;


2、创建一个带输入参数的存储过程
(1)创建存储过程sp_course_avggrade, 实现通过输入课程编号参数查询指定课程编号的课程平均成绩的功能;

create PROC sp_coures_grade (@a int)
as
begin
select AVG(grade) from sc where cno = @a;
end


(2)调用该存储过程,获取指定课程的平均成绩

execute sp_course_avggrade 2;


3、创建一个带输入输出参数的存储过程
(1)创建存储过程sp_sdept _student,实现根据用户输入的院系编号参数,查找该学院的学生人数,并以变量形式输出的功能;

create proc sp_sdept_student2 (@a varchar(15),@b int output)
as
begin
select @b = COUNT(sno) from student where sdept = @a;
end


(2)调用该存储过程,以返回变量的形式获取相应院系的学生人数。

declare @num int;
execute sp_sdept_student2 '计科',@num output;
print @num;


4、触发器的创建与使用
(1)在学生表上创建触发器,实现学生表中删除学生记录时,成绩表中该学生成绩记录的级联删除;

create trigger T_ST
ON student
after delete
as
delete from sc where sno = (select sno from deleted)

(2)在选课表上创建触发器,若录入的成绩大于100分,小于0分,则拒绝插入记录并显示;

create trigger T_SC
ON sc
after insert
as
if (select grade from inserted)<1 or (select grade from inserted)>100
begin
print 'grade wrong'
rollback transaction
end


 

你可能感兴趣的:(mysql,计算机基础,mysql,数据库,sql,sqlserver)