为什么我的 SQL 过程返回整个 table?

Why is my SQL procedure returning the entire table?

DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS;

DELIMITER //

CREATE PROCEDURE STUDENTS_BY_STATUS(status VARCHAR(10))

BEGIN

    SELECT BannerId, Name FROM STUDENT WHERE Status=status;

END //

DELIMITER ;

CALL STUDENTS_BY_STATUS("Freshman");

我的Table(学生)

我的结果

使用其他名称调用您的参数,因为您在 table 中有名为 status 的列。

我通常遵循参数前缀 p_ 和局部变量前缀 v_ 的约定。

CREATE PROCEDURE STUDENTS_BY_STATUS(p_status VARCHAR(10))
BEGIN    
    SELECT BannerId, Name FROM STUDENT WHERE Status = p_status;
END //
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS;

DELIMITER //

CREATE PROCEDURE STUDENTS_BY_STATUS(IN statusIn VARCHAR(10))

BEGIN

    SELECT BannerId, Name FROM STUDENT WHERE Status=statusIn;

END //

DELIMITER ;

将其标记为 IN 参数并为参数使用不同的名称。