MySQL:遍历列名

12

我想从MySQL表中获取所有列名,然后循环遍历每个列名,并使用这些列名作为变量运行存储过程。 实现方式类似于:

colnames = get column names from table

for each colname
  if something changed then
    do something
  else
    do something else

看起来SHOW COLUMNS FROM myTable会给我列名,但是如何将列名放入循环中呢?

我真的想在使用本地SQL的存储过程中运行所有这些内容。由于我仍在学习MySQL的复杂性,并且这将真正有助于我的项目。感谢您的帮助。


我只想在MySQL Workbench中以本地SQL编写此内容。我计划将列名用作UPDATE查询的一部分。 - RyanKDalton
2个回答

22

我认为您需要的是这样的:

DECLARE col_names CURSOR FOR
  SELECT column_name
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
  ORDER BY ordinal_position;


select FOUND_ROWS() into num_rows;

SET i = 1;
the_loop: LOOP

   IF i > num_rows THEN
        CLOSE col_names;
        LEAVE the_loop;
    END IF;


    FETCH col_names 
    INTO col_name;     

     //do whatever else you need to do with the col name

    SET i = i + 1;  
END LOOP the_loop;

那看起来正是我需要的。非常感谢!第一个SELECT语句可行,然而,当我添加了“DECLARE col_names CURSOR FOR”时,我遇到了一个语法错误。你有什么想法吗? - RyanKDalton
5
好的!事实证明我只需要更改分隔符并声明 num_rows、i、col_name 就可以很好地运行了。非常感谢! - RyanKDalton
1
还需要打开 col_names - keineahnung2345

5
您可以针对information_schema编写查询以获取列名:
SELECT column_name
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
  ORDER BY ordinal_position

然后列名就像从表中返回的任何数据一样被返回。

7
这是一个很好的开始,给了我列名!但是我该如何将它们放入一个变量(列表?)中以便迭代处理呢? - RyanKDalton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接