为什么存储过程总是在 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
您声明 col_name
是一个整型参数,但您传递的值是 'id'
。
MySQL 通过读取任何初始数字字符并忽略其余部分将字符串转换为整数。如果没有数字字符,该值将转换为 0。
所以您正在准备并执行此查询:
SELECT MAX(0) FROM tbl_segment
自然returns零。
我正在尝试创建一个将采用两个输入参数的存储过程 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
您声明 col_name
是一个整型参数,但您传递的值是 'id'
。
MySQL 通过读取任何初始数字字符并忽略其余部分将字符串转换为整数。如果没有数字字符,该值将转换为 0。
所以您正在准备并执行此查询:
SELECT MAX(0) FROM tbl_segment
自然returns零。