MySQL Proc调用 - 设置奇怪的行为

时间:2015-05-26 20:51:45

标签: mysql stored-procedures

我的桌子有点像这样:

rnumber

number = int,cod = int

SELECT * FROM number WHERE number = 21377 and cod = 55; 返回正确的值;

所以我有一个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,即使数字和cod的组合也不存在。

有谁能指出我做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试使用select into而不是set xx =(select ...)。

同时拥有cod = Cod将始终返回true ...

您还需要申报变量......

试试这个:

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$$