如何在MySQL存储过程中按ID获取行?

时间:2017-02-28 06:04:34

标签: mysql sql-server stored-procedures

我在MySQL中存储过程有问题。我希望通过传递ID参数来获得单行,但是,似乎SP忽略了WHERE过滤器并显示了表的所有列。

我觉得奇怪的是,如果我在存储过程外的查询中传递id的特定值,例如1003,则返回预期的结果。

对不起,如果我的错误是愚蠢的,我是新手。

表格结构如下:

CREATE TABLE Paciente
 (
    ID INT AUTO_INCREMENT NOT NULL,
    DNI CHAR(8) UNIQUE NULL,
    Nombre NVARCHAR(70) NOT NULL,
    Apellido_Paterno NVARCHAR(30) NOT NULL,
    Apellido_Materno NVARCHAR(30) NOT NULL,
    Edad TINYINT NOT NULL,
    Sexo CHAR(1) NOT NULL,
    Calle NVARCHAR(50) NULL,
    Numero_Domicilio SMALLINT(4) NULL,
    Telefono NVARCHAR(8) NULL,
    Movil NVARCHAR(10) NULL,
    Estado_Civil NVARCHAR(20) NULL,
    Ocupacion NVARCHAR(30) NULL,
    Fecha_Registro DATETIME DEFAULT CURRENT_TIMESTAMP,
    Estado BOOLEAN NULL DEFAULT TRUE,
    PRIMARY KEY(ID)
)ENGINE = InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000;


Stored Procedure:

DELIMITER $$
CREATE PROCEDURE `buscarPaciente`(IN id INT)
BEGIN
SELECT * FROM Paciente WHERE ID = id LIMIT 1;
END
$$
DELIMITER ;

1 个答案:

答案 0 :(得分:1)

该行为是由命名输入参数与列名相同引起的,因此mysql无法区分where子句中的列和参数。重命名输入参数,让我们说param_ID,它将返回包含请求的ID值的记录。

DELIMITER $$
CREATE PROCEDURE `buscarPaciente`(IN param_ID INT)
    BEGIN
        SELECT * FROM Paciente WHERE ID = param_ID LIMIT 1;
    END
$$
DELIMITER ;