Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程插入问题_Mysql_Sql_Sql Server_Stored Procedures - Fatal编程技术网

MySQL存储过程插入问题

MySQL存储过程插入问题,mysql,sql,sql-server,stored-procedures,Mysql,Sql,Sql Server,Stored Procedures,以下情况适用: 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.`passwor

以下情况适用:

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变量设置了限制,顺便说一句,它是10。但是当我运行这个过程时,它在temp表中插入了100多行,我不明白为什么,它应该只插入10行。

解决了

问题在于,我没有在再次创建表时删除它,从而一次又一次地插入相同的值

DROP TABLE IF EXISTS `smth_table`; 
这将在创建之前插入,并且查询将平滑运行:-)