繁体   English   中英

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

[英]How to get a row by ID in a MySQL Stored Procedure?

我对 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 ;

该行为是由于将输入参数命名为与列名相同,因此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 ;
DELIMITER $$                                                                           
CREATE PROCEDURE `Student`(IN param_ID INT)                                                
   BEGIN                                                                                      
       SELECT * FROM Student WHERE **Student.ID = param_ID** LIMIT 1;                       
   END                                                                
$$                                                                     
DELIMITER ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM