我打算编写一个过程,以对提供的列表(可以是逗号分隔的列表或表,尚未确定)中的每个表运行查询
我首先创建了一个while循环来迭代提供的列表中的每个元素。能够提取每个元素,但我不知道如何为提取的元素/表运行查询。
DELIMITER $$
DROP PROCEDURE IF EXISTS retain_demo_clients$$
CREATE PROCEDURE retain_demo_clients()
BEGIN
DECLARE counter INT(10);
DECLARE client_tables VARCHAR(255);
DECLARE table_count INT(10);
DECLARE table_in_process VARCHAR(255);
SET counter = 1;
SET table_count = 3;
SET client_tables = 'client_table, somerandomstuff, somemorestuff';
WHILE (counter < table_count +1) DO
SET table_in_process = substring_index(substring_index(client_tables, ',',counter),',',-1);
SELECT table_in_process;
SET counter = counter +1;
END WHILE;
END$$
DELIMITER ;
CALL retain_demo_clients();
我希望做类似“从table_in_process中选择*”的操作。如果有更好的方法遍历表列表,也将不胜感激。
如果有人想修补,这里是DBFiddle链接:https://www.db-fiddle.com/f/v6EMsiWvXFrBoNLgoZwDVX/1
答案 0 :(得分:0)
您可以使用EXECUTE
来运行表示单个语句的文本
SET @someQuery = CONCAT('SELECT * FROM ', table_in_process ) ;
PREPARE preparable_stmt FROM @someQuery;
EXECUTE preparable_stmt;