第七章 存储过程、函数与触发器

第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**********/


  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值