首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL遍历表

问MySQL遍历表
EN

Stack Overflow用户
提问于 2012-10-04 08:04:14
回答 4查看 25.3K关注 0票数 10

我想从包含first_name列的每个表中输出数据。我编写了以下过程,但在我的循环中,mysql逐字解释表名,而不是计算变量table_name。修复方法是什么?

代码语言:javascript
复制
delimiter //

drop procedure if exists hunt //
create procedure hunt()
begin
    DECLARE done int default false;
    DECLARE table_name CHAR(255);

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_SCHEMA = "wholesale_production" and COLUMN_NAME LIKE "%first%" ;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open cur1;

    myloop: loop
        fetch cur1 into table_name;
        if done then
            leave myloop;
        end if;
        select * from `wholesale_production`.table_name where created_at >= '2012-10-01';
    end loop;

    close cur1;
end //

delimiter ;

call hunt();
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-04 08:26:49

试试这个:

代码语言:javascript
复制
delimiter //

drop procedure if exists hunt //
create procedure hunt()
begin
    DECLARE done BOOL default false;
    DECLARE tablename CHAR(255);

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_SCHEMA = "wholesale_production" and COLUMN_NAME LIKE "%first%" ;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open cur1;

    myloop: loop
        fetch cur1 into tablename;
        if done then
            leave myloop;
        end if;
        set @sql = CONCAT('select * from `wholesale_production`.', tablename, ' where created_at >= ''2012-10-01''');
        prepare stmt from @sql;
        execute stmt;
        drop prepare stmt;
    end loop;

    close cur1;
end //

delimiter ;

call hunt();
票数 16
EN

Stack Overflow用户

发布于 2015-04-27 18:00:47

对上面的代码进行一点编辑,以迭代ahtoug所有的表并选择它们。

代码语言:javascript
复制
delimiter //
drop procedure if exists hunt //
create procedure hunt()
begin
    DECLARE done int default false;
    DECLARE table_name CHAR(255);

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
                  WHERE table_schema ='mbu4u';
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open cur1;
       myloop: loop
        fetch cur1 into table_name;
        if done then
            leave myloop;
        end if;
        set @sql = CONCAT('select * from `mbu4u`.',table_name);
        prepare stmt from @sql;
        execute stmt;
        drop prepare stmt;
    end loop;

    close cur1;
end //

delimiter //
票数 1
EN

Stack Overflow用户

发布于 2017-04-26 18:35:37

table_name是使用"DECLARE table_name CHAR(255);“中另一个变量名的保留令牌

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12718596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档