噗-噗 2023-12-20 00:02 采纳率: 50%
浏览 6
已结题

关于#MySQL#的问题,如何解决?(相关搜索:存储过程)


创建存储过程查询指定学生成绩单
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 ;

  • 写回答

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 ;
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥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文件