[英]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.