MYSQL过程:循环遍历文本列的不同值并创建临时表
我的subgroups表MYSQL过程:循环遍历文本列的不同值并创建临时表,mysql,stored-procedures,Mysql,Stored Procedures,我的subgroups表 subgroup_abbr_str AA BB BB CC DD DD DD ... and many more 我想为每个值创建一个临时表。临时表AA、BB、CC和DD。这是我创建表var而不是AA的初始代码 CREATE PROCEDURE FLAGITERATION() BEGIN DECLARE totRows INT DEFAULT 0; DECLARE startRow INT DEFAULT 0; DECLARE var TEXT DEFAULT NU
subgroup_abbr_str
AA
BB
BB
CC
DD
DD
DD
... and many more
我想为每个值创建一个临时表。临时表AA、BB、CC和DD。这是我创建表var而不是AA的初始代码
CREATE PROCEDURE FLAGITERATION()
BEGIN
DECLARE totRows INT DEFAULT 0;
DECLARE startRow INT DEFAULT 0;
DECLARE var TEXT DEFAULT NULL;
SELECT COUNT(*) FROM subgroups INTO totRows ;
SET startRow=0;
WHILE startRow<totRows DO
SELECT DISTINCT subgroup_abbr_str FROM subgroups LIMIT startRow,1 INTO var ;
CREATE TEMPORARY TABLE var AS SELECT SUM(present)
FROM trad_new;
SET startRow = startRow + 1;
END WHILE;
End;
;;
CREATE PROCEDURE flag迭代()
开始
声明默认值为0;
声明startRow INT默认值为0;
声明var文本默认为NULL;
从子组中选择COUNT(*)到totRows;
设置startRow=0;
而startRow则需要花费更多的时间用所有表重建样本数据,以纠正编程错误
您想要做的事情可以通过动态sql来完成
此外,还应该为循环使用光标
|总数(目前)|
| -----------: |
| 1 |
dbfiddle您使用以下语句的目的是什么?设置@a:=\u子组;这只是一个调试行,我用它来检查程序流。
CREATE TABLE subgroups (subgroup_abbr_str VaRCHAR(2));
INSERT INTO subgroups VALUES ('AA'),
('BB'),
('BB'),
('CC'),
('DD'),
('DD'),
('DD')
CREATE tABLE trad_new (present INT)
INSERT INTO trad_new VALUEs (1)
CREATE PROCEDURE FLAGITERATION()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE _subgroup varchar(100) DEFAULT "";
-- declare cursor for subgroup_abbr_str
DEClARE cursubgroup
CURSOR FOR
SELECT DISTINCT subgroup_abbr_str FROM subgroups;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN cursubgroup;
getsubgroup: LOOP
FETCH cursubgroup INTO _subgroup;
IF finished = 1 THEN
LEAVE getsubgroup;
-- build taböe
SET @sql = CONCAT("CREATE TEMPORARY TABLE ",_subgroup," AS SELECT SUM(present)
FROM trad_new;");
PREPARE stmt FROM @sql;
EXECUTE stmt;
END LOOP getsubgroup;
CLOSE cursubgroup;
DEALLOCATE PREPARE stmt;
End
call FLAGITERATION()
SELECT * FROM AA;
| SUM(present) |
| -----------: |
| 1 |