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()
BEGIN
SELECT 姓名,课程名称,分数 FROM student_info s,curriculum c,grade g
WHERE s.`学号`=g.`学号` AND c.`课程编号`=g.`课程编号` AND s.`学号`='0001';
end @@
DELIMITER ;
CALL stu_grade();
二、实验思考
1.存储函数和存储过程如何将运算结果返回给外界?
存储函数通过'return'语句返回函数值
存储过程通过'out inout'参数将结果带出
2.存储函数有OUT参数、INOUT参数吗?
(1)存储函数的参数类型类似于IN参数,没有OUT参数、INOUT参数,而存储过程的参数类型有三种,即IN参数、OUT参数、INOUT参数
(2)存储函数和存储过程统称为存储例程(stored routine)。两者的定义语法很相似,但却是不同的内容。存储函数限制比较多,比如不能用临时表,只能用表变量。还有一些函数都不可用等等。而存储过程的限制相对就比较少。
一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
3.使用游标的步骤
(1)声明游标:首先需要使用DECLARE语句声明一个游标,并指定游标的名称和查询语句;
(2)打开游标:使用OPEN语句打开游标,使其准备好进行数据遍历;
(3)获取数据:使用FETCH语句从游标中获取一行数据。可以使用不同的FETCH语句来获取不同类型的数据;
(4)处理数据:获取到数据后,可以对其进行处理。可以使用游标的当前行数据进行各种操作,例如插入、更新、删除等;
(5)关闭游标:在完成数据处理后,使用CLOSE语句关闭游标,释放资源。