需求:向trade这个数据库中的每一个表增加多个字段
遇到问题:存储过程,游标,循环,动态sql执行
注意:
mysql存储过程在我所使用的5.5版本中不能使用 show 的命令,利用 information_schema 获得表的相关信息。
游标循环中出现 select into 赋值 为 null 的时候,循环会 提前退出,解决方法有三种
- 不用select into
- select aa into bb,aa改为count(aa),之后的代码由判断null改为判断0
- 当赋值结果为null的时候,会自动修改循环触底的标志,所以手动在循环底部增加 set b = 1;
-- Procedure "useCursor" DDL drop PROCEDURE if exists useCursor; CREATE PROCEDURE `useCursor`() BEGIN /*局部变量的定义 declare*/ declare temp_table_name varchar(100) default ''; declare temp varchar(100); declare b int default 0; /*是否达到记录的末尾控制变量*/ declare cur CURSOR FOR (SELECT table_name from information_schema.`TABLES` where TABLE_SCHEMA = 'trade'); DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1; /*开游标*/ OPEN cur; /*游标向下走一步,将查询出来的两个值付给定义的两个变量*/ FETCH cur INTO temp_table_name; WHILE ( b<>1 ) DO #1 SELECT COLUMN_NAME into temp from information_schema.`COLUMNS` where TABLE_SCHEMA = 'trade' and table_name = temp_table_name and COLUMN_NAME = 'bb'; if temp is null then set @sql = concat('alter table ', temp_table_name); set @sql = concat(@sql, ' add bb varchar(50);' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; end if; #2 SELECT COLUMN_NAME into temp from information_schema.`COLUMNS` where TABLE_SCHEMA = 'trade' and table_name = temp_table_name and COLUMN_NAME = 'ww'; if temp is null then set @sql = concat('alter table ', temp_table_name); set @sql = concat(@sql, ' add ww varchar(50);' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; end if; #3 SELECT COLUMN_NAME into temp from information_schema.`COLUMNS` where TABLE_SCHEMA = 'trade' and table_name = temp_table_name and COLUMN_NAME = 'ff'; if temp is null then set @sql = concat('alter table ', temp_table_name); set @sql = concat(@sql, ' add ff varchar(50);' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; end if; #4 SELECT COLUMN_NAME into temp from information_schema.`COLUMNS` where TABLE_SCHEMA = 'trade' and table_name = temp_table_name and COLUMN_NAME = 'pp'; if temp is null then set @sql = concat('alter table ', temp_table_name); set @sql = concat(@sql, ' add pp varchar(50);' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; end if; /*游标向下走一步*/ set b = 0; FETCH cur INTO temp_table_name; END WHILE; CLOSE cur; END; call useCursor; drop PROCEDURE if exists useCursor;
相关推荐
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
本篇文章将详细讨论在MySQL存储过程中如何使用游标循环,并特别关注如何进行跳出和继续操作。 首先,游标循环通常有三种基本形式:`LOOP`、`REPEAT`和`WHILE`。每种循环结构都有其特定的语法和用途,但核心思想都是...
MySQL存储过程是数据库管理系统提供的一种集成了SQL语句的编程机制,允许用户创建一组复杂的数据库操作,以便在需要时重复使用。存储过程提高了代码的可重用性,减少了网络流量,并且提供了更好的安全性。从MySQL ...
根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...
在MySQL中,游标通常与存储过程或函数一起使用,以便在循环中处理每一行数据。游标的操作包括打开、移动(如:FETCH)和关闭。 创建游标: 创建一个游标需要定义一个SELECT语句,该语句将作为游标的源。例如: ```...
在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...
在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用来执行复杂的数据库操作。在存储过程中,循环语句是控制流程的关键元素之一,它允许我们在满足特定条件时重复执行一段代码。本文将详细讲解如何在MySQL...
MySQL游标是一种在数据库存储过程中用于逐行处理查询结果的控制结构。 其主要步骤包括:声明游标以定义所需查询,打开游标以进行初始化,使用FETCH提取每一行数据,并在完成操作后关闭游标以释放资源。 游标通常...
自MySQL 5.0版本开始引入存储过程和触发器,使得数据库功能更加丰富,同时也引入了对游标的有限支持。尽管MySQL的游标使用方式与PL/SQL有所不同,但基本概念相似。 首先,定义游标是创建一个特定的指针,用于在查询...
MySQL 是一种广泛使用的关系型数据库管理系统,提供了强大的数据存储和管理功能。本文总结了 MySQL 数据库中常用的 SQL 语句和操作,涵盖了数据操作、数据定义、数据控制、事务控制、程序化 SQL 等方面。 数据操作 ...
10. **游标管理**:存储过程和函数中,游标必须在退出时关闭,异常情况下也要确保关闭。 11. **回滚操作**:存储过程和函数在更新数据时,异常捕获代码应包含回滚操作。 **设计建议** 1. **同步机制**:对于需要...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个单元可以包含多种SQL操作,如SELECT、INSERT、UPDATE、DELETE等,以及流程控制语句,如IF-...
MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者创建一系列复杂的SQL操作并作为一个单元执行。游标在存储过程中的应用则提供了遍历查询结果集的能力,使得逐行处理数据成为可能。以下是对该实例的详细...
在MySQL中,游标是一种非常实用的工具,尤其在处理批量数据操作时。游标允许我们按行遍历查询结果集,并对每一行执行特定的操作,例如批量添加索引或字段。下面将详细讲解如何使用游标进行这些操作。 首先,我们...
全局系统变量在整个MySQL服务器范围内有效,而局部变量仅限于存储过程或函数的内部。局部变量的定义使用`DECLARE`语句,如:`DECLARE var1 INT DEFAULT 0;` 条件结构在MySQL中主要涉及If和Case。If语句允许根据条件...
MySQL存储过程是数据库管理系统中的一种重要工具,它允许开发者编写一系列复杂的SQL语句,包括查询、插入、更新和删除等,然后作为一个单元进行调用。在这个特定的场景中,存储过程被用来解决设备数据的统一管理问题...
MySQL数据库是当前应用最为广泛的关系型数据库管理系统之一,它支持多种数据类型和存储引擎,同时也提供了丰富的编程接口和复杂的查询语言。在学习MySQL数据库应用与开发时,第七章通常会介绍编程方面的基础知识,...