`

mysql数据库存储过程游标循环,提前退出

阅读更多

需求:向trade这个数据库中的每一个表增加多个字段

遇到问题:存储过程,游标,循环,动态sql执行

注意:

mysql存储过程在我所使用的5.5版本中不能使用 show 的命令,利用 information_schema 获得表的相关信息。

游标循环中出现 select into 赋值 为 null 的时候,循环会 提前退出,解决方法有三种

  1. 不用select into
  2. select aa into bb,aa改为count(aa),之后的代码由判断null改为判断0
  3. 当赋值结果为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;

 

0
0
分享到:
评论

相关推荐

    Mysql游标(循环操作)

    在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...

    MySQL存储过程中游标循环的跳出和继续操作示例

    本篇文章将详细讨论在MySQL存储过程中如何使用游标循环,并特别关注如何进行跳出和继续操作。 首先,游标循环通常有三种基本形式:`LOOP`、`REPEAT`和`WHILE`。每种循环结构都有其特定的语法和用途,但核心思想都是...

    mysql存储过程 游标 循环使用介绍

    MySQL存储过程是数据库管理系统提供的一种集成了SQL语句的编程机制,允许用户创建一组复杂的数据库操作,以便在需要时重复使用。存储过程提高了代码的可重用性,减少了网络流量,并且提供了更好的安全性。从MySQL ...

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

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

    mysql游标实现到了最后一个结束之后结束循环

    在MySQL中,游标通常与存储过程或函数一起使用,以便在循环中处理每一行数据。游标的操作包括打开、移动(如:FETCH)和关闭。 创建游标: 创建一个游标需要定义一个SELECT语句,该语句将作为游标的源。例如: ```...

    通过存储过程删除Mysql数据库表中的重复记录.pdf

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...

    MySQL存储过程中使用WHILE循环语句的方法

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用来执行复杂的数据库操作。在存储过程中,循环语句是控制流程的关键元素之一,它允许我们在满足特定条件时重复执行一段代码。本文将详细讲解如何在MySQL...

    Mysql的游标的定义使用及关闭深入分析

    自MySQL 5.0版本开始引入存储过程和触发器,使得数据库功能更加丰富,同时也引入了对游标的有限支持。尽管MySQL的游标使用方式与PL/SQL有所不同,但基本概念相似。 首先,定义游标是创建一个特定的指针,用于在查询...

    Mysql数据库中英对照表[借鉴].pdf

    MySQL 是一种广泛使用的关系型数据库管理系统,提供了强大的数据存储和管理功能。本文总结了 MySQL 数据库中常用的 SQL 语句和操作,涵盖了数据操作、数据定义、数据控制、事务控制、程序化 SQL 等方面。 数据操作 ...

    Mysql数据库设计标准

    10. **游标管理**:存储过程和函数中,游标必须在退出时关闭,异常情况下也要确保关闭。 11. **回滚操作**:存储过程和函数在更新数据时,异常捕获代码应包含回滚操作。 **设计建议** 1. **同步机制**:对于需要...

    MySQL存储过程学习资料

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个单元可以包含多种SQL操作,如SELECT、INSERT、UPDATE、DELETE等,以及流程控制语句,如IF-...

    mysql存储过程中使用游标的实例

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者创建一系列复杂的SQL操作并作为一个单元执行。游标在存储过程中的应用则提供了遍历查询结果集的能力,使得逐行处理数据成为可能。以下是对该实例的详细...

    MySQL使用游标批量处理进行表操作

    在MySQL中,游标是一种非常实用的工具,尤其在处理批量数据操作时。游标允许我们按行遍历查询结果集,并对每一行执行特定的操作,例如批量添加索引或字段。下面将详细讲解如何使用游标进行这些操作。 首先,我们...

    【MySQL数据库设计与应用(五)】MySQL 编程基础

    全局系统变量在整个MySQL服务器范围内有效,而局部变量仅限于存储过程或函数的内部。局部变量的定义使用`DECLARE`语句,如:`DECLARE var1 INT DEFAULT 0;` 条件结构在MySQL中主要涉及If和Case。If语句允许根据条件...

    mysql存储过程基础之遍历多表记录后插入第三方表中详解

    MySQL存储过程是数据库管理系统中的一种重要工具,它允许开发者编写一系列复杂的SQL语句,包括查询、插入、更新和删除等,然后作为一个单元进行调用。在这个特定的场景中,存储过程被用来解决设备数据的统一管理问题...

    mysql第七章.pdf

    MySQL数据库是当前应用最为广泛的关系型数据库管理系统之一,它支持多种数据类型和存储引擎,同时也提供了丰富的编程接口和复杂的查询语言。在学习MySQL数据库应用与开发时,第七章通常会介绍编程方面的基础知识,...

Global site tag (gtag.js) - Google Analytics