创建存储过程查询指定学生成绩单
delimter$
CREATE PROCEDURE pro_grade(
IN id VARCHAR(30),
IN name VARCHAR(30)
)
BEGIN
IF id IS NULL OR name IS NULL THEN
SELECT '请输入学号与姓名!';
ELSEIF (
(SELECT name FROM Student WHERE id = id) != name
OR (SELECT id FROM Student WHERE name = name) != id
) THEN
SELECT '输入有误!';
ELSE
SELECT Student.id, name, Kname, Ggrade
FROM Student, Grade, Course
WHERE Student.id = Grade.id
AND Grade.Kid = Course.Kid
AND name = name;
END IF;
END $
delimter;
请问为啥出错啊
改成这样对吗?
DELIMITER $
CREATE PROCEDURE pro_grade(
IN p_id VARCHAR(30),
IN p_name VARCHAR(30)
)
BEGIN
DECLARE v_name VARCHAR(30);
DECLARE v_id VARCHAR(30);
IF p_id IS NULL OR p_name IS NULL THEN
SELECT '请输入学号与姓名!';
ELSE
SELECT id INTO v_id, name INTO v_name
FROM Student
WHERE id = p_id AND name = p_name;
IF v_id IS NULL OR v_name IS NULL THEN
SELECT '输入有误!';
ELSE
SELECT Student.id, name, Kname, Ggrade
FROM Student
JOIN Grade ON Student.id = Grade.id
JOIN Course ON Grade.Kid = Course.Kid
WHERE name = p_name;
END IF;
END IF;
END $
DELIMITER ;
关于#MySQL#的问题,如何解决?(相关搜索:存储过程)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
小孟多 2023-12-20 10:28关注出现错误的原因是因为你在第一段代码中使用了错误的语法。以下是修正后的正确代码:
DELIMITER $ CREATE PROCEDURE pro_grade( IN p_id VARCHAR(30), IN p_name VARCHAR(30) ) BEGIN IF p_id IS NULL OR p_name IS NULL THEN SELECT '请输入学号与姓名!'; ELSEIF ( (SELECT name FROM Student WHERE id = p_id) != p_name OR (SELECT id FROM Student WHERE name = p_name) != p_id ) THEN SELECT '输入有误!'; ELSE SELECT Student.id, name, Kname, Ggrade FROM Student, Grade, Course WHERE Student.id = Grade.id AND Grade.Kid = Course.Kid AND name = p_name; END IF; END $ DELIMITER ;本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用