Почему моя процедура SQL возвращает всю таблицу?

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

Мой Стол (СТУДЕНТ)

Мой результат

2 ответа

Решение

Назовите ваш параметр с другим именем, так как в вашей таблице есть столбец с именем 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 param и используйте другое имя для param.

Другие вопросы по тегам