Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 - Fatal编程技术网

MySQL例程中的循环

MySQL例程中的循环,mysql,Mysql,下面的查询返回多个表名 SET @var2 = 'col1'; SELECT table_name FROM information_schema.columns WHERE table_schema = 'db1' and column_name like @var2 我需要将表_name的值存储在数组中,并通过UPDATE语句循环它。所以我试着这样做。[重写上述查询] SELECT table_name into @var3 FROM information_schema.columns

下面的查询返回多个表名

SET @var2 = 'col1';

SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2
我需要将表_name的值存储在数组中,并通过UPDATE语句循环它。所以我试着这样做。[重写上述查询]

SELECT table_name into @var3
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2


UPDATE @var3 SET @var2='Test' WHERE 1=1
实际上,UPDATE语句必须运行表计数的次数


因为var3不能保存很多值,所以我得到了一个错误。所以我希望它是一个数组,并通过UPDATE语句循环它。是否有继续的想法?

我认为您需要在存储过程中循环游标。像这样的,

DECLARE t_name VARCHAR(100);
DECLARE not_found_t_names INT DEFAULT 0;

DECLARE cur_table_names CURSOR FOR 
SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2

DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_t_names = 1;

OPEN cur_table_names;
  SET not_found_t_names = 0;
  t_name_loop : LOOP 
  FETCH cur_table_names INTO t_name;
  IF not_found_t_names THEN
      CLOSE cur_table_names;
      LEAVE t_name_loop;
  END IF;

  SET @update_stmt = CONCAT('UPDATE ',t_name,' SET ',@var2,'=Test WHERE 1=1');

  PREPARE stmt FROM @update_stmt;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

 END LOOP;
由于要处理变量中的结构元素,这有点棘手,因此需要正确执行
concat
。我没有一个环境来测试这一点,所以请自己进行语法更正,如果有任何需要修复的,但我认为这将是这样做的方式。应该工作了,祝你好运