2014-06-26 103 views
0

所以以下情形适用:MySQL的存储过程INSERT问题

...

CREATE TEMPORARY TABLE IF NOT EXISTS `smth_table` (
    `login` VARCHAR(20), 
    `password` VARCHAR(20), 
    `type` INT(11), 
    `account_state` DECIMAL(12,4) 
); 

PREPARE Selection FROM 
    "INSERT INTO `smth_table` 
    (SELECT ta.`login`, ta.`password`, ta.`type`, ta.`account_state` 
    FROM tableA ta 
    INNER JOIN tableB tb ON tb.id_client = ta.id_client 
    WHERE tb.id_lot = ? AND ta.`type` MOD 2 = 0 
    AND ta.first_use = '0000-00-00 00:00:00' 
    AND ta.account_state = 0 
    LIMIT ?)"; 
SET @WHERE = var1; 
SET @LIMIT = var2; 
EXECUTE Selection USING @WHERE, @LIMIT; 
DEALLOCATE PREPARE Selection; 

DECLARE curs CURSOR FOR 
    SELECT `password` FROM `smth_table`; 

DECLARE CONTINUE HANDLER 
FOR NOT FOUND SET v_finished = 1; 


OPEN pin_curs; 

get_pass: LOOP 
    FETCH curs INTO pass; 
    IF v_finished = 1 THEN 
    LEAVE get_pass; 
    END IF; 

    UPDATE tableA ta INNER JOIN tableB tb 
    ON tb.id_client = ta.id_client 
    SET `type` = `type` | 1, 
    `account_state` = `account_state` + 5 
    WHERE tb.id_lot = var1 
    AND `password` = pass; 


END LOOP get_pass; 

CLOSE curs; 

END 

我的问题是:为什么,当我运行此存储过程,确实临时表与更多的则填充限制?请记住,我设置了LIM变量,通过一个IN变量传递过程......并且它是10,btw ...但是当我运行该过程时,它在临时表中插入更多100行......并且我不'不知道为什么...当它只能插入10 ...

任何人都可以帮忙吗?

回答

1

已解决!

中继的事实是,我没有在再创造它删除表,这样一遍又一遍插入相同的价值观问题......

DROP TABLE IF EXISTS `smth_table`; 

此创造它和查询的运行之前插入光滑:-)

希望它可以帮助别人!
祝你好运,
阿瑞斯。