我需要此查询的帮助,该查询对我不起作用,也不知道为什么,找不到错误。

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `buscarchile`(dni int)
BEGIN
SELECT Nombre, Apellido FROM chile WHERE DNI = dni;
END


有了这个代码,它给了我名字/名字和姓氏/ Apellido Wheather,它是否具有正确的dni。我也尝试过这种方式:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `buscarchile`(dni int)
BEGIN
SELECT Nombre, Apellido FROM chile WHERE DNI = @dni;
END


但是无论我是否输入正确的dni,它都不会给我任何数据,就像找不到任何具有该dni的人一样,但是我知道有人具有相同的dni。

请帮助我,谢谢。

最佳答案

在声明中

SELECT Nombre, Apellido FROM chile WHERE DNI = dni;


列名DNI和变量名dni之间存在名称冲突。

对变量或过程参数使用var_ColumnName类实践是一种更好的做法。

不管是否保留这种做法,如果将参数读入局部变量并在SQL语句中使用相同的参数,会更好。

像这样更改您的例程:

delimiter //

create
  DEFINER=`root`@`localhost`
  procedure `buscarchile`( dni int )
begin

  declare var_DNI int = dni;

  SELECT Nombre, Apellido FROM chile WHERE DNI = var_DNI;

end;
//

delimiter ;

关于mysql - MySQL简单查询错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23017243/

10-11 08:41