通用合并表存储过程 循环变量与字符连接

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

存储过程循环变量与字符连接

Java代码   收藏代码
  1. mysql> DELIMITER $$  
  2. mysql> drop PROCEDURE sp_test_switch$$  
  3. Query OK, 0 rows affected (0.01 sec)  
  4.   
  5. mysql> CREATE PROCEDURE sp_test_switch()  
  6.     -> BEGIN  
  7.     ->  declare a int;  
  8.     ->  declare b varchar(5000);  
  9.     ->  set a=1;  
  10.     ->  set b='';  
  11.     ->  while a<10 do  
  12.     ->          set b = concat(b,',',a);  
  13.     ->          set a=a+1;  
  14.     ->  end while;  
  15.     ->  select b;  
  16.     -> END  
  17.     -> $$  
  18. Query OK, 0 rows affected (0.00 sec)  
  19.   
  20. mysql> DELIMITER ;  
  21. mysql>  
  22. mysql> call sp_test_switch();  
  23. +--------------------+  
  24. | b                  |  
  25. +--------------------+  
  26. | ,1,2,3,4,5,6,7,8,9 |  
  27. +--------------------+  
  28. 1 row in set (0.00 sec)  
  29. Query OK, 0 rows affected (0.00 sec)  
  30. mysql>  

MySQL存储过程的变量定义:declare和直接set @var什么区别?

我的理解是, declare定义的是局部变量, 只能用在存储过程或函数中, 其有效区间就是存储过程或函数中声明该变量的begin end区间.而@var属于用户变量(自己声明的), 其有效区间就是该session, 你既可以在存储过程或函数中使用, 也可以在自己写的SQL语句中使用.还有@不需要声明类型,declare必须指定类型

Java代码   收藏代码
  1. CREATE PROCEDURE sp_starnight_cbj()   
  2. BEGIN  
  3. DECLARE A INT DEFAULT 1;  
  4. DECLARE B VARCHAR(5000) DEFAULT '';  
  5. WHILE A<10 DO  
  6.     SET B = CONCAT(B,',',A);  
  7.     SET A=A+1;  
  8. END WHILE;  
  9. SELECT B;  
  10. END;   

 应用:所有分表  

Java代码   收藏代码
  1. DROP PROCEDURE IF EXISTS `merage_branch_table`;  
  2. CREATE PROCEDURE `merage_branch_table`(  
  3.     IN     p_table_name   VARCHAR(200),      
  4.     IN     p_branch_size  INT,  
  5.     in     p_lpad         INT  
  6. )  
  7. BEGIN  
  8.     DECLARE m_begin_row INT DEFAULT 0;  
  9.     SET @m_merage_sql = '';  
  10.     WHILE m_begin_row<p_branch_size DO  
  11.         IF(m_begin_row=p_branch_size-1)  
  12.             THEN SET @m_merage_sql = CONCAT(@m_merage_sql'SELECT * FROM ', p_table_name, '_', LPAD(m_begin_row, p_lpad, 0));  
  13.             ELSE SET @m_merage_sql = CONCAT(@m_merage_sql'SELECT * FROM ', p_table_name, '_', LPAD(m_begin_row, p_lpad, 0),' UNION ALL ');  
  14.         END IF;  
  15.   
  16.         SET m_begin_row = m_begin_row+1;  
  17.     END WHILE;  
  18.   
  19.     PREPARE main_stmt FROM @m_merage_sql;    
  20.     EXECUTE main_stmt;               
  21. END;  
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 开发框架 前端开发
基于MySQL 实现通用分页存储过程(下篇-超详细)(上)
基于MySQL 实现通用分页存储过程(下篇-超详细)
113 0
|
存储 SQL 关系型数据库
MySQL连接查询与存储过程
MySQL连接查询与存储过程
102 0
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
153 0
|
6月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
8月前
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-循环(while、repeat、loop)
MySQL数据库——存储过程-循环(while、repeat、loop)
1427 0
|
8月前
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)
MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)
605 0
|
8月前
|
存储 关系型数据库 MySQL
Mysql存储过程查询结果赋值到变量
Mysql存储过程查询结果赋值到变量
178 0
|
8月前
|
存储 关系型数据库 MySQL
mysql 存储过程游标 循环输出select 查询结果
mysql 存储过程游标 循环输出select 查询结果
149 0
|
9月前
|
存储 数据库
【数据库】分支与循环&函数&存储过程
【数据库】分支与循环&函数&存储过程
92 1
|
9月前
|
存储 SQL Oracle