`
sz_jack
  • 浏览: 3936 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段

 
阅读更多

 转载: https://blog.csdn.net/weixin_42159024/article/details/81488788

 

 实现功能: 

升级数据库。通过遍历所有数据库,对每个数据库进行升级,通过新建表、字段升级。这里主要通过数据库名.表名来实现在同一个存储过程中切换不同数据库。

 

drop procedure if exists addColumn;
drop procedure if exists updateDataBase;
delimiter $$;
--创建存储过程:新增字段,传入参数:数据库名、表名、字段名、字段类型(int、VARCHAR...)
create procedure 'addColumn'(in dataName VARCHAR(100),in tableName VARCHAR(100),in columnName VARCHAR(100),in columnType VARCHAR(100))
BEGIN
	DECLARE column_num int;
	set @sqlstr=concat("select count(*) into @column_num from information_schema.columns where table_schema='",dataName,"' and table_name='",tableName,"' and column_name='",columnName,"'");
	PREPARE sqlstr FROM @sqlstr;
	EXECUTE sqlstr;
	if @column_num=0 then
	set @sqlstr=concat("alter table ",dataName,".",tableName," add column ",columnName,columnType);
	PREPARE sqlstr FROM @sqlstr;
	EXECUTE sqlstr;
    end if;
END
$$
delimiter$$;

--创建存储过程:更新数据库,通过创建表及字段来升级数据库
drop procedure if exists updateDataBase;
delimiter$$;
create procedure 'updateDataBase'()
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE dataName VARCHAR(100);
    DECLARE s int DEFAULT 0;
    --将以ticket_开头的数据库遍历
    DECLARE consume CURSOR FOR select distinct table_schema as dataName from information_schema.'TABLES' where table_schema like 'ticket_%';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
    OPEN consume;
        FETCH consume into dataName;
        while s<>1 DO
            call addColumn(dataName,'tbl_dc_neinfo','isPassed',' varchar(128) DEFAULT NULL');--调用存储过程,在表tbl_dc_neinfo中新建字段isPassed varchar(128) DEFAULT NULL

            --新建表,在不同的数据库中
            set @sql_create_table=concat(
            "CREATE TABLE IF NOT EXISTS ",dataName,"tbl_dc_neinfo",
            "(
                'OID' bigint(20) NOT NULL AUTO_INCREMENT,
                '字段2' 类型,
                PRIMARY KEY('OID')
             )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");
            PREPARE sql_create_table FROM @sql_create_table;
            EXECUTE sql_create_table;

            FETCH consume INTO dataName;
        end WHILE;
    CLOSE consume;
END
$$;
delimiter$$;
call updateDataBase();
drop procedure if exists updateDataBase;
drop procedure if exists addColumn;

 

 

分享到:
评论

相关推荐

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...

    Java调用存储过程--传入集合参数

    在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将深入探讨如何在Java中有效地调用存储过程,并向其传递集合参数,主要聚焦于Oracle...

    使用MYSQL5创建存储过程procedure

    在MySQL5中,存储过程(Procedure)是一种非常重要的数据库编程元素,它允许用户预先定义一组SQL语句并将其封装在一起,以便在需要时作为一个单元执行。这样不仅可以提高代码的复用性,还可以优化数据库操作的效率,...

    VC使用ADO Data和DataGrid控件实现遍历、修改、删除、添加.rar

    本教程将详细介绍如何利用它们实现对数据库的遍历、修改、删除和添加功能。 首先,ADO是微软提供的一个数据库访问接口,它封装了ODBC(Open Database Connectivity)和其他数据库访问技术,提供了更高级别的抽象,...

    谷歌翻译接口调用、数据库字段翻译助手

    它可以遍历数据库中的所有字段,通过调用谷歌翻译接口,将字段名或字段注释从一种语言翻译成另一种语言,从而极大地提高工作效率。 在这个名为“TranslateApp.exe”的应用程序中,可能包含以下功能: 1. 连接数据库...

    java如何获得数据库表中各字段的字段名

    ### Java如何获得数据库表中各字段的字段名 在Java编程中,经常需要与数据库进行交互,例如查询、更新或删除等操作。其中一项常见需求是获取数据库表中的所有字段名称。这通常在动态生成报表或者需要根据数据库结构...

    Mybatis传list参数调用oracle存储过程的解决方法

    但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,本文将给大家介绍Mybatis传List参数调用Oracle存储过程的解决方法。 使用Mybatis传List参数调用Oracle存储过程的解决方法 在...

    vc 使用ADO在数据库中遍历、修改和删除记录

    在VC++开发环境中,ADO(ActiveX Data Objects)是一种常用的数据访问技术,它允许程序员方便地与各种数据库系统交互,包括Microsoft SQL Server、Oracle、MySQL等。本篇将详细讲解如何利用ADO在数据库中进行遍历、...

    Mysql通过存储过程分割字符串为数组

    本话题主要介绍如何利用存储过程来实现这一功能,涉及的关键知识点包括MySQL的内置函数以及存储过程的创建与调用。 1. **REVERSE() 函数**: - `REVERSE(str)` 是一个MySQL字符串函数,它接收一个字符串参数`str`...

    在java中 遍历mysql中的树形结构

    在Java中遍历MySQL数据库中的树形结构是一个复杂但重要的任务,涉及数据库设计、递归算法以及性能优化等多个方面。通过深入理解树形结构的特点,并采用合适的遍历算法和优化策略,可以有效地管理和操作复杂的层级...

    从mysql数据库中批量下载Blob图片到本地

    本教程将深入探讨如何在Java环境下,批量地从MySQL数据库中下载存储在Blob字段中的图片,并将其保存到本地文件系统。 首先,我们需要理解Blob类型。Blob是MySQL中的一个数据类型,用于存储大量二进制数据。它分为四...

    mysql递归调用获取树节点(子树)

    在提供的`mysql递归调用获取树节点(子树).doc`文档中,应该详细解释了这个过程,包括如何创建和执行存储过程,以及如何使用提供的测试数据。确保查看文档以获取完整的步骤和示例,以便在实际项目中成功应用这些...

    Jquery+ajax+php+mysql数据库实现用户注册登录

    在本项目中,"Jquery+ajax+php+mysql数据库实现用户注册登录"是一个典型的Web应用程序开发案例,它涵盖了前端交互、后端处理以及数据库管理等多个方面。以下将详细阐述这些知识点: 1. **Jquery**:Jquery是一个...

    1000个表存储过程

    根据给定的信息,本文将详细解析“1000个表存储过程”的核心知识点,包括如何创建大量的存储过程以及在数据库管理中应用这些存储过程的实际意义。 ### 创建1000个表存储过程 #### 一、理解存储过程 存储过程是一种...

    对比两个数据库的字段是否一致 源码 (可对比两个数据库的一个或多个表或者所有表)

    标题和描述提到的"对比两个数据库的字段是否一致"是一项常见的任务,它可以帮助我们检查两个数据库中的表结构、字段数量以及字段属性是否匹配。这个任务可以通过编写特定的源码来实现,下面我们将详细讨论这个过程。...

    Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中_数据库_杨秀璋的专栏-CSDN博客

    本文将详细介绍如何在Java开发环境中,结合MyEclipse IDE和Tomcat服务器,配置MySQL数据库并实现查询结果显示在JSP网页中。这个过程对于任何Java Web开发者来说都是基本技能,能够帮助你构建动态的Web应用程序。 ##...

    生成时间维度表的存储过程

    本文将详细解析“生成时间维度表的存储过程”的核心知识点,包括其设计思路、实现方法以及应用场景。 ### 核心知识点 #### 1. 时间维度表的作用 时间维度表是数据仓库中的一种特殊类型表,它通常包含日期、星期、...

    商业编程-源码-使用ADO处理存储过程源代码 stored_proc_using_ado.zip

    这个压缩包文件"stored_proc_using_ado.zip"包含了使用ADO(ActiveX Data Objects)来处理存储过程的源代码,这对于我们理解和实现数据库交互有着重要的意义。 ADO是微软提供的一个数据访问接口,它允许程序员通过...

    基于Myeclipse与MySQL数据库表格的增删改查

    通过以上步骤,我们可以在Myeclipse中使用Java JSP与MySQL数据库实现完整的CRUD操作,为Web应用程序提供数据存储与检索的能力。在实际项目中,还可以结合MVC模式、框架(如Spring、Hibernate)等进一步提升开发效率...

Global site tag (gtag.js) - Google Analytics