我有一个表测试,其中包含以下列
test1, test2, test3, abc_xxx, abc_yyy, abc_zzz, abc_ppp, abc_yyy, test4, test5
的
获取以pattern" abc _"开头的所有列名
之后选择以" abc _"开头的所有这些列的不同数据;进入一些临时表的单列 临时表是文件
的
的colnames = get the column names starting with pattern "abc_"
for each colname
select distinct(colname) into temp
最后,temp应该具有以pattern&#34开头的所有列的不同数据; abc _"测试表
我尝试使用以下存储过程, 的 的
的DROP PROCEDURE IF EXISTS test1;
DELIMITER //
CREATE PROCEDURE test1()
BEGIN
DECLARE cols varchar(255);
DECLARE MY_CURSOR CURSOR FOR SELECT columns from fields;
DROP TABLE IF EXISTS temp;
DROP TABLE IF EXISTS fields;
CREATE TEMPORARY TABLE temp( id BIGINT(20) );
CREATE TEMPORARY TABLE fields( columns varchar(255) );
INSERT INTO fields select Column_name from Information_schema.columns where Table_name like 'test' and Column_name like '%abc%';
OPEN MY_CURSOR;
traverse_ids: LOOP
FETCH MY_CURSOR INTO cols;
IF cols IS NULL
THEN
LEAVE traverse_metrics;
ELSE
INSERT INTO temp SELECT distinct(cols) FROM test;
END IF;
END LOOP traverse_ids;
CLOSE MY_CURSOR;
END //
DELIMITER ;
的
但是它返回了错误"没有数据 - 提取,选择或处理零行"
答案 0 :(得分:0)
DECLARE updateDone INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET updateDone = 1;
添加了这两行来防止错误
但问题是当我调用程序时,它处于执行状态很长一段时间,不知道proc有什么问题。有人可以弄明白或提供替代
答案 1 :(得分:0)
修改IF逻辑修复了问题 FETCH MY_CURSOR INTO col;
IF done
THEN
LEAVE doUpdate;
ELSE