【问题标题】:How to get a row by ID in a MySQL Stored Procedure?如何在 MySQL 存储过程中按 ID 获取一行?
【发布时间】:2017-07-18 23:40:52
【问题描述】:

我对 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 sql-server stored-procedures


【解决方案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 ;

【讨论】:

  • 嘿,非常感谢,你说得对,这解决了我的问题。现在它起作用了!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多