2025年【MySQL -ERROR】MySQL 报错 ERROR 1327 创建函数识别不出数据库中的表(解决方法)

【MySQL -ERROR】MySQL 报错 ERROR 1327 创建函数识别不出数据库中的表(解决方法)1 问题背景 今天用 MySQL 创建含流程控制语句函数 遇到总会识别不出数据库中的 courses 表 courses 是存在数据库中 且可以正常使用的 报错如下 ERROR 1327 42000 Undeclared variable courses 创建函数

大家好,我是讯享网,很高兴认识大家。

1.问题背景

今天用MySQL创建含流程控制语句函数,遇到总会识别不出数据库中的courses表,courses是存在数据库中,且可以正常使用的,报错如下:

ERROR 1327 (42000): Undeclared variable: courses

– 创建函数:要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)


讯享网

代码如下:

DELIMITER // CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_sid(id INT) RETURNS VARCHAR(300) DETERMINISTIC BEGIN DECLARE name VARCHAR(20); DECLARE course_name VARCHAR(20); DECLARE score INT; SELECT stu.sname INTO name, courses.cname INTO course_name, sc.score INTO score FROM students AS stu, courses, scores AS sc WHERE stu.sid = sc.sid AND courses.cid = sc.cid AND stu.sid = id; IF score >= 60 THEN RETURN name, '--', course_name, '--', '及格'; ELSEIF score > 0 AND score < 60 THEN RETURN name, '--', course_name, '--', '不及格'; ELSE RETURN '找不到该学生或该学生没有选课!'; END IF; END// DELIMITER ; 

讯享网

2.原因分析及解决方案

2.1 原因分析

创建函数或者存储过程时,记录集不是允许的类型,因此,不能通过一个参数返回多个行和列,也不能通过一条select语句赋予多个参数值。

2.2 解决方案

将每一个参数分别通过一条select语句去赋值,修改后代码如下:

讯享网DROP FUNCTION IF EXISTS get_student_scores_by_id; DELIMITER // CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_id(sid INT, cid INT) RETURNS VARCHAR(300) DETERMINISTIC BEGIN -- 多个变量要分开声明,否则会报错 DECLARE score INT; DECLARE name VARCHAR(20); DECLARE course_name VARCHAR(20); SELECT sc.score INTO score FROM scores AS sc WHERE sc.sid = sid AND sc.cid = cid; -- 注意:多个输出值一定要用多个SELECT来赋值,否则会报错 SELECT sname INTO name FROM students AS stu WHERE stu.sid = sid; SELECT cname INTO course_name FROM courses AS co WHERE co.cid = cid; IF score >= 60 THEN RETURN CONCAT(name, '--', course_name, '--', '及格'); ELSEIF score > 0 AND score < 60 THEN RETURN CONCAT(name, '--', course_name, '--', '不及格'); ELSE RETURN '找不到该学生、课程或该学生没有选课!'; END IF; END// DELIMITER ; 
小讯
上一篇 2025-01-05 07:50
下一篇 2025-03-20 19:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74259.html