存储过程和函数

【实验14-15】

(1) 创建不带参数的存储过程。
① 创建一个从student表查询班级号为“20070301”班的学生资料的存储过程proc_1,其中包括学号、姓名、性别、出生年月等。调用proc_1存储过程,观察执行结果。

CREATE PROCEDURE proc_1()
BEGIN
	SELECT sno,sname,ssex,sbirthday
	FROM student
	WHERE classno='20070301';
END;
CALL proc_1();

② 在gradem1数据库中创建存储过程proc_2,要求实现如下功能:存在不及格情况的学生选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、系别等。调用proc_2存储过程,观察执行结果。

CREATE PROCEDURE proc_2()
BEGIN
	SELECT a.sno,sname,ssex,b.cno,cname,degree,sdept
	FROM student a,sc b,course c
	WHERE a.sno=b.sno AND b.cno=c.cno
	AND degree<60;
END;
CALL proc_2();

(2) 创建带输入参数的存储过程。
创建一个从student表查询学生资料的存储过程 proc_3,其中包括学号、姓名、性别、出生年月、班级等。要查询的班级号通过执行语句中的输入参数传递给存在过程。
其中,“20070303”为要传递给存储过程proc_3的输入参数,也即是要查询的资料的班级号。

CREATE PROCEDURE proc_3(IN classno_no INT,OUT class_no VARCHAR(20))
BEGIN
	SELECT sno,sname,ssex,sbirthday,classno
	FROM student
	WHERE classno=classno_no;
END;
CALL proc_3('20070303',@sum); 

(3) 创建带输出参数的存储过程。
创建一个从sc表查询某一门课程考试成绩总分的存储过程proc_4。
在以上存储过程中,要查询的课程号通过执行语句中的输入参数@cno传递给存储过程,@sum_degree作为输出参数用来存放查询得到的总分。执行此存储过程,观察执行结果。

CREATE PROCEDURE proc_4(IN `@cno` char(10),OUT `@sun_degree` VARCHAR(20))
	BEGIN
		SELECT SUM(degree)
		FROM sc
		WHERE cno=@cno;
	END;
CALL proc_4('a01',@sun_degree);

这个答案是空的,不知道哪里错了

(4) 创建proc_5实现功能:输入的学号,根据该生所选课程的平均分显示提示信息,平均分大于等于90的,则显示“该生成绩优秀”,平均分小于90但是大于等于80的,则显示“该生成绩良好”,平均分小于80但是大于等于60的,则显示“该生成绩合格”,平均分小于60的,则显示“该生成绩不及格”。
并调用该存储过程,显示某个学生的学习情况。

CREATE PROCEDURE proc_5(IN sno_no INT)
BEGIN
	SELECT CASE
	WHEN AVG(degree)>=90 THEN '改考生成绩优秀'
	WHEN AVG(degree)>=80 AND degree<90 THEN '改考生成绩良好'
	WHEN AVG(degree)>=60 THEN '改考生成绩合格'
	WHEN AVG(degree)<60 THEN '改考生成绩不合格'
	END
	AS '成绩'
	FROM sc
	WHERE sno=sno_no;
END;
CALL proc_5('2007010104');

(5) 创建func_5实现功能:输入的学号,根据该生所选课程的平均分显示提示信息,平均分大于等于90的,则显示“该生成绩优秀”,平均分小于90但是大于等于80的,则显示“该生成绩良好”,平均分小于80但是大于等于60的,则显示“该生成绩合格”,平均分小于60的,则显示“该生成绩不及格”。并调用该函数,显示某个学生的学习情况。

CREATE FUNCTION func_5(sno_no INT)
RETURNS VARCHAR(20)
BEGIN
	DECLARE a VARCHAR(20);
	SELECT CASE
	WHEN AVG(degree)>=90 THEN '改考生成绩优秀'
	WHEN AVG(degree)>=80 AND degree<90 THEN '改考生成绩良好'
	WHEN AVG(degree)>=60 THEN '改考生成绩合格'
	WHEN AVG(degree)<60 THEN '改考生成绩不合格'
	END AS 成绩 INTO a 
	FROM sc
	WHERE sno=sno_no;
	RETURN a;
END;
SELECT func_5('2007010104');
  • 20
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值