MySQL Proc Call - 设置奇怪的行为
MySQL Proc Call - Set Strange Behaviour
我有一个 table 有点像这样:
人数
number = int, cod = int
SELECT * FROM number WHERE number = 21377 and cod = 55;
returns 正确值;
所以我有一个 proc 调用要插入:
CREATE DEFINER=`root`@`%` PROCEDURE `create`(IN Numb INT, IN Cod INT, IN qt INT)
BEGIN
SET @Cont = 0;
SET @Init = Numb;
WHILE @Cont < qt DO
SET @Exist = (SELECT count(number) FROM rnumber WHERE number = @Init AND cod = Cod LIMIT 1);
IF @Exist = 0 THEN
INSERT INTO (...)
END IF;
SET @Cont = @Cont + 1;
SET @IniT = @Init + 1;
END WHILE;
END$$
呼叫 create
(21377, 54, 1);
总是给我变量@Exist 为 1,所以不要继续 if,即使 number 和 cod 的组合不存在。
谁能指出我做错了什么?
谢谢。
尝试使用 select into 而不是 set xx = (select...).
同时 cod = Cod
将始终 return 正确...
您还需要声明您的变量...
试试这个:
CREATE DEFINER=`root`@`%` PROCEDURE `create`(IN p_Numb INT, IN p_Cod INT, IN p_qt INT)
BEGIN
declare v_Exist integer;
declare v_Init integer;
declare v_Exist integer;
SET v_Cont = 0;
SET v_Exist = 0;
SET v_Init = p_Numb;
WHILE v_Cont < p_qt DO
SELECT count(number) into v_Exist FROM rnumber WHERE number = v_Init AND cod = p_Cod LIMIT 1;
IF v_Exist = 0 THEN
INSERT INTO (...)
END IF;
SET v_Cont = v_Cont +1;
SET v_IniT = v_Init + 1;
END WHILE;
END$$
我有一个 table 有点像这样:
人数
number = int, cod = int
SELECT * FROM number WHERE number = 21377 and cod = 55; returns 正确值;
所以我有一个 proc 调用要插入:
CREATE DEFINER=`root`@`%` PROCEDURE `create`(IN Numb INT, IN Cod INT, IN qt INT)
BEGIN
SET @Cont = 0;
SET @Init = Numb;
WHILE @Cont < qt DO
SET @Exist = (SELECT count(number) FROM rnumber WHERE number = @Init AND cod = Cod LIMIT 1);
IF @Exist = 0 THEN
INSERT INTO (...)
END IF;
SET @Cont = @Cont + 1;
SET @IniT = @Init + 1;
END WHILE;
END$$
呼叫 create
(21377, 54, 1);
总是给我变量@Exist 为 1,所以不要继续 if,即使 number 和 cod 的组合不存在。
谁能指出我做错了什么? 谢谢。
尝试使用 select into 而不是 set xx = (select...).
同时 cod = Cod
将始终 return 正确...
您还需要声明您的变量...
试试这个:
CREATE DEFINER=`root`@`%` PROCEDURE `create`(IN p_Numb INT, IN p_Cod INT, IN p_qt INT)
BEGIN
declare v_Exist integer;
declare v_Init integer;
declare v_Exist integer;
SET v_Cont = 0;
SET v_Exist = 0;
SET v_Init = p_Numb;
WHILE v_Cont < p_qt DO
SELECT count(number) into v_Exist FROM rnumber WHERE number = v_Init AND cod = p_Cod LIMIT 1;
IF v_Exist = 0 THEN
INSERT INTO (...)
END IF;
SET v_Cont = v_Cont +1;
SET v_IniT = v_Init + 1;
END WHILE;
END$$