第七次作业

| 这个作业属于哪个课程| https://edu.cnblogs.com/campus/uzz/cs3 |
| ---------- | ---------------------------------------------------- |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/uzz/cs3/homework/13095|
| 这个作业的目标 | <存储过程和存储函数>

1、输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名的学生的各科成绩。

DELIMITER @@
CREATE PROCEDURE stu_info(IN name CHAR(8))
BEGIN
SELECT s.学号,姓名,课程编号,分数 FROM student_info s,grade g
WHERE s.学号=g.学号 and 姓名=name;
END @@

使用CALL命令执行存储过程stu_info,其参数值为'张青平'。

DELIMITER ;
CALL stu_info('张青平');

2、使用studentsdb数据库中的student_info表、curriculum表、grade表。

(1)创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。

(2)调用存储过程stu_grade。

DELIMITER @@
CREATE PROCEDURE stu_grade(IN number CHAR(4))
BEGIN
select s.姓名,c.课程名称,g.分数 from curriculum c,grade g ,student_info s
where g.课程编号=c.课程编号 and s.学号=g.学号 and g.学号=number;
END @@

DELIMITER ;
CALL stu_grade('0001');

3、使用studentsdb数据库中的student_info表、curriculum表、grade表。

(1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。

(2)调用存储过程stu_name。

(3)删除存储过程stu_name。

DELIMITER @@
CREATE PROCEDURE stu_name(IN name CHAR(10))
BEGIN

select s.姓名,max(g.分数) as 最高分,min(g.分数) as 最低分,avg(g.分数) as 平均分 from curriculum c,grade g ,student_info s
where g.课程编号=c.课程编号 and s.学号=g.学号 and s.姓名=name;

END @@

DELIMITER ;
CALL stu_name('刘东阳');

drop PROCEDURE stu_name;

4、使用studentsdb数据库中的grade表。

DELIMITER @@
CREATE PROCEDURE stu_g_r(IN number CHAR(4))
BEGIN
select count(课程编号) as 选修课门数 from grade
where 学号=number;
END @@

DELIMITER ;
CALL stu_g_r('0002');

5、使用studentsdb数据库中的curriculum表、grade表。

DELIMITER @@
CREATE PROCEDURE num_func(IN name CHAR(10))
BEGIN
select count(g.学号) as 选课人数 from grade g
where 课程编号=(select 课程编号 from curriculum where 课程名称=name );
END @@

DELIMITER ;
CALL num_func('C语言程序设计');

6、使用studentsdb数据库中的curriculum表、grade表。

DELIMITER @@
CREATE FUNCTION avg_func(cname VARCHAR(50))
RETURNS DECIMAL
BEGIN
DECLARE v_acg DECIMAL;
DECLARE avg_cur CURSOR FOR SELECT avg(分数) FROM grade g, curriculum c
WHERE g.课程编号 = c.课程编号 AND 课程名称 = cname;
OPEN avg_cur;
FETCH avg_cur INTO v_acg;
CLOSE avg_cur;
RETURN v_acg;
END @@

DELIMITER ;
CALL num_func('C语言程序设计');

DROP FUNCTION avg_func;

二、实验思考

1、存储函数和存储过程如何将运算结果返回给外界?

存储函数和存储过程都是数据库中的可重用代码块,它们可以在数据库中进行调用和执行。它们的主要区别在于它们的用途和语法。存储函数通常是用于执行特定的计算或转换,并返回一个值。存储函数可以接受参数,并且可以在函数体内进行各种计算和逻辑操作。在函数执行完成后,存储函数将返回一个值给调用者。这个返回值可以是任何数据类型,例如整数、字符串、日期等。存储过程则是一组为了完成特定任务而编写的SQL语句集合。它可以接受参数、执行各种操作(例如插入、更新、删除数据等)以及进行条件判断和循环控制等。与存储函数不同的是,存储过程不直接返回一个值,而是通过输出参数将结果传递给调用者。存储过程的输出参数可以是任何数据类型,例如整数、字符串、日期等。无论是存储函数还是存储过程,它们都将运算结果返回给调用者。

2、存储函数有OUT参数、INOUT参数吗?

没有,存储函数只能返回函数结果,返回时可以使用return语句进行

3、使用游标的步骤。

1.声明游标:declare 游标名 cursor for select语句;

2.打开游标:open 游标名;

3.处理数据: fetch insert delete update语句

4.关闭游标:close 游标名;

5.释放游标:deallocate 游标名;

posted @ 2023-11-01 18:24  杨11  阅读(77)  评论(0编辑  收藏  举报