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

时间:2017-04-03 19:33:34

标签: mysql procedures

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");

我的桌子(学生) enter image description here

我的结果

enter image description here

2 个答案:

答案 0 :(得分:4)

使用其他名称调用参数,因为表中的列名为status。

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

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

答案 1 :(得分:3)

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 param并为param使用不同的名称。