第1关:创建存储过程
编程要求
根据提示,在右侧编辑器补充代码,创建存储过程pro_findname 对学生姓名进行模糊查找,输入任一字输出姓名中含有该字的全部学生。
use teachingdb;
/****请在此编写代码,操作完毕之后点击评测******/
-- 创建存储过程pro_findname 对学生姓名进行模糊查找,输入任一字输出姓名中含有该字的全部学生。
/**********Begin**********/
delimiter $$
drop procedure if exists pro_findname$$
CREATE PROCEDURE pro_findname(in word char(3))
BEGIN
select * from student where sname like concat('%',word,'%');
END$$
delimiter ;
/**********End**********/
第2关:创建函数-count_credit
编程要求
根据提示,在右侧编辑器补充代码,设计函数 count_credit
,根据学号计算该学生的总学分,只有当成绩大于等于60分时才能获得该门课程的学分。
use teachingdb;
/****请在此编写代码,操作完毕之后点击评测******/
/**********Begin**********/
delimiter $
CREATE FUNCTION count_credit(psno char(5)) returns int
Begin
declare totalcredit int;
select sum(credit) from course where cno
in(select cno from score where grade>=60 and sno=psno) into totalcredit;
return totalcredit;
end $
delimiter ;
/**********End**********/
第3关:存储过程-调用函数count_credit
编程要求
根据提示,在右侧编辑器补充代码,创建存储过程 p_count_credit,调用count_credit 函数更新学生表的总学分值。
use teachingdb;
/****请在此编写代码,操作完毕之后点击评测******/
/**********Begin**********/
DELIMITER $$
CREATE PROCEDURE p_count_credit()
BEGIN
DECLARE flag int default 1;
declare psno char(5);
DECLARE stucur cursor for select sno from student;
declare continue handler for not found set flag=0;
open stucur;
while flag=1 do
fetch stucur into psno;
update student set totalcredit=count_credit(psno) where sno=psno;
end while;
close stucur;
end $$
delimiter ;
/**********End**********/
第4关:创建触发器-计算总学分
编程要求
根据提示,在右侧编辑器补充代码,创建触发器 sum_credit,实现对 student 表总学分的计算,当 score 中添加记录时,student 表总学分的值做相应改变。当课程成绩大于等于60分时,将该课程的学分加到该学生的总学分中。
use teachingdb;
/****请在此编写代码,操作完毕之后点击评测******/
/**********Begin**********/
delimiter $$
drop trigger if exists sum_credit$$
create trigger sum_credit after insert on score
for each row
Begin
update student set totalcredit=totalcredit+
(select credit from course where cno=new.cno)
where sno=new.sno and new.grade>=60;
end$$
delimiter ;
/**********End**********/
第5关:创建触发器-练习级联删除操作
编程要求
根据提示,在右侧编辑器补充代码,创建级联删除触发器 del_student_score,当删除 student 表中的学生时,也删除 score 表中的对应学号的学生成绩记录。
use teachingdb;
/****请在此编写代码,操作完毕之后点击评测******/
/**********Begin**********/
delimiter //
create trigger del_student_score before delete on student for each row
Begin
delete from score where sno=old.sno;
end //
delimiter ;
/**********End**********/