【问题标题】:MySQL stored procedure INSERT issueMySQL存储过程INSERT问题
【发布时间】:2014-08-17 02:13:33
【问题描述】:

以下情况适用:

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

为什么,当我运行这个存储过程时,临时表的填充量超过了限制?请记住,我使用通过该过程的 IN 变量设置了 LIMIT,顺便说一下,它是 10。但是当我运行它在临时表中插入更多 100 行的过程时,我不明白为什么,它应该只插入 10 行。

【问题讨论】:

    标签: mysql sql sql-server stored-procedures


    【解决方案1】:

    已解决!

    问题在于我没有在再次创建表时删除表,因此一遍又一遍地插入相同的值......

    DROP TABLE IF EXISTS `smth_table`; 
    

    在创建它之前插入它并且查询运行顺利:-)

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2011-06-16
      • 2016-10-28
      相关资源
      最近更新 更多