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
。我没有一个环境来测试这一点,所以请自己进行语法更正,如果有任何需要修复的,但我认为这将是这样做的方式。应该工作了,祝你好运