创建存储过程查询指定学生成绩单
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无用
悬赏问题
- ¥15 关于#java#的问题,请各位专家解答!
- ¥15 急matlab编程仿真二阶震荡系统
- ¥20 TEC-9的数据通路实验
- ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
- ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
- ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
- ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
- ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
- ¥30 求解达问题(有红包)
- ¥15 请解包一个pak文件