Mysql存储proc以选择一个表的特定列数据到临时表中

时间:2015-07-01 09:50:55

标签: mysql stored-procedures

我有一个表测试,其中包含以下列

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 ;

但是它返回了错误"没有数据 - 提取,选择或处理零行"

2 个答案:

答案 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