mysql使用存储过程批量给表加字段

背景:在一个项目中,您需要将相同的字段添加到数百个表中,这很难手动添加,因此您计划使用存储过程来实现。

[En]

Background: in a project, you need to add the same fields to hundreds of tables, which is difficult to add manually, so you plan to use stored procedures to implement it.

编写的存储过程:

delimiter //
-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS updateTables;
-- 创建存储过程
CREATE PROCEDURE updateTables()
BEGIN
-- 定义变量
    DECLARE s int DEFAULT 0;
    DECLARE tableName varchar(100);
    DECLARE var_sql varchar(800);
    DECLARE cnt INT DEFAULT 0;

    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE report CURSOR FOR select table_name from information_schema.tables where table_schema='pbocbdms' and table_name like 'ods_%';

    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;

    -- 打开游标
    open report;

        -- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
        fetch report into tableName;

        -- 当s不等于1,也就是未遍历完时,会一直循环
        while s<>1 do

            -- 执行业务逻辑
            SELECT count(*) into cnt FROM information_schema.columns WHERE table_schema='pbocbdms' AND table_name = tableName  AND column_name = 'xm_code';

            -- 列不存在则可以添加
            IF cnt = 0 THEN
                set var_sql = concat('alter table ',tableName,' add column xm_code varchar(50) COMMENT \'项目别名编码\';');
                set @sql = var_sql;
                PREPARE s1 from @sql;
                EXECUTE s1;
                deallocate prepare s1;
            END IF;

            -- 继续抓取游标数据到变量
            fetch report into tableName;
        end while;
    -- 关闭游标
    close report;
END //
delimiter ;

调用存储过程

call updateTables();

Original: https://www.cnblogs.com/hdwang/p/16097550.html
Author: 追极
Title: mysql使用存储过程批量给表加字段

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505498/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 第17章 触发器

    第17章 触发器 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 &#x5546;&#x54C1;&#x4FE1;&#x…

    数据库 2023年6月6日
    0113
  • Atlas快速入门

    之前的公司在数据中台的项目上调研决定启用了Atlas作为我们数据血缘管理的工具,让我给大家写了一份Atlas快速入门的文档,所以在这里我将这篇文档以一个纯新手视角的方式再一次优化,…

    数据库 2023年6月11日
    084
  • 域名SSL认

    阿里云:域名SSL认证-视频 Hole yor life get everything if you never give up. Original: https://www.cn…

    数据库 2023年6月9日
    0105
  • vue-router各个属性的作用及用法

    原文:https://www.cnblogs.com/goloving/p/9211358.html vue-router是vue单页面开发的路由,就是决定页面跳转的! Props…

    数据库 2023年6月16日
    076
  • idea的使用技巧和必要的设置

    idea 如何开启多个线程 打开下面按钮,然后运行相同的代码即可 打开idea需要选择打开哪一个项目 设置如下,关闭下面选项即可 posted @2022-06-17 21:07 …

    数据库 2023年6月14日
    081
  • Java开源博客系统AngelBlog发布

    一、Java开源博客系统(AngelBlog)系统简介 Angel工作室AngelBlog系统是基于Java Spring boot +前端bootstrap+jquery+lay…

    数据库 2023年6月14日
    059
  • MYSQL–>视图

    视图就是一种 虚拟存在的表。因为视图的数据不在数据库中实际存在。 视图的行和列的数据都来自于 我们定义视图所使用的表 其中,定义视图所使用的表叫 基表 视图的行和列的数据是在使用视…

    数据库 2023年6月14日
    064
  • NO.3 Linux-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    084
  • grafana+prometheus如何查看tcp连接数量

    最后解决方案 经过和负责监控的大佬了解,获得了一个可行的方案:在每个pod中新增一个sidecar容器,在容器中部署node_exporter,或者在容器中放个自动查看端口连接数并…

    数据库 2023年6月9日
    0113
  • atomic 原子自增工程案例

    案例 1 : 简单用法 atomic_int id; atomic_fetch_add(&id, 1) atomic_uint id; atomic_fetch_add(&…

    数据库 2023年6月9日
    083
  • MySQL45讲之函数转换导致不使用索引

    本文介绍了由于函数转换而不使用索引的三个问题。请注意,不使用索引意味着不使用树搜索,而是使用全表扫描索引树。 [En] This article introduces three …

    数据库 2023年5月24日
    062
  • Airbnb JavaScript 代码规范(转载)

    一种写JavaScript更合理的代码风格。 其他代码风格指南 1.1 原始值: 当你访问一个原始类型的时候,你可以直接使用它的值。 string number boolean n…

    数据库 2023年6月11日
    0110
  • mysql8使用tmpfs内存磁盘当内存数据库的配置方法

    内存关系数据库没有找到开源好用的,很多都是商用。虽然mysql有memory引擎,但写是整体锁表,没法用。 一直想将mysql放入内存中,搜索n次资料,没找到合适的,可能之前思路不…

    数据库 2023年5月24日
    092
  • 容器化 | 在 Rancher 中部署 MySQL 集群

    我们已经介绍了如何在 Kubernetes 和 KubeSphere 上部署 RadonDB MySQL 集群。本文将演示如何在 Rancher[1] 上部署 RadonDB My…

    数据库 2023年5月24日
    0110
  • springboot~ApplicationContextAware与@Autowired注解

    ApplicationContextAware是一个接口,它提供一个方法setApplicationContext,当spring注册完成之后,会把ApplicationConte…

    数据库 2023年6月6日
    074
  • MySQL之SQL语句优化

    即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行。 移除不必要的括号 select * from x where ((a = 5)); 上面…

    数据库 2023年5月24日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球