为什么存储过程总是在 mysql 中返回 0

why stored proc always returning 0 in mysql

我正在尝试创建一个将采用两个输入参数的存储过程 1.Table 姓名 2.栏目名称 并从列中找到最大值。 存储过程创建成功在DB.Here是定义

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GETMAXIMUMID`(IN `tab_name` VARCHAR(40), IN `col_name` INT(10))
BEGIN
 SET @t1 =CONCAT('SELECT max(',col_name,') FROM ',tab_name );
 PREPARE stmt3 FROM @t1;
 EXECUTE stmt3;
 DEALLOCATE PREPARE stmt3;
END$$
DELIMITER ;

现在我称它为

CALL GETMAXIMUMID('tbl_segment','id');

但它总是返回 0 作为每个 table 的结果。

请让我知道我在哪里 wrong.I 我是第一次尝试存储过程,这是我几天来学到的东西。

CREATE 
/* DEFINER=`root`@`localhost` */
PROCEDURE `GETMAXIMUMID`(IN `tab_name` VARCHAR(64), IN `col_name` VARCHAR(64))
BEGIN
 SET @t1 =CONCAT('SELECT max(',col_name,') FROM ',tab_name );
 PREPARE stmt3 FROM @t1;
 EXECUTE stmt3;
 DEALLOCATE PREPARE stmt3;
END

fiddle

您声明 col_name 是一个整型参数,但您传递的值是 'id'

MySQL 通过读取任何初始数字字符并忽略其余部分将字符串转换为整数。如果没有数字字符,该值将转换为 0。

所以您正在准备并执行此查询:

SELECT MAX(0) FROM tbl_segment

自然returns零。