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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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

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;  
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 开发框架 前端开发
基于MySQL 实现通用分页存储过程(下篇-超详细)(上)
基于MySQL 实现通用分页存储过程(下篇-超详细)
66 0
|
7月前
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
68 0
|
存储 SQL Java
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
623 0
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
|
2月前
|
存储 数据库
【数据库】分支与循环&函数&存储过程
【数据库】分支与循环&函数&存储过程
22 1
|
3月前
|
存储 SQL 关系型数据库
MySQL存储过程 if、case、while、loop、游标、变量、条件处理程序
MySQL存储过程 if、case、while、loop、游标、变量、条件处理程序
42 0
|
4月前
|
存储 SQL Oracle
|
4月前
|
存储 SQL 关系型数据库
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
43 0
|
10月前
|
存储 关系型数据库 MySQL
MySQL中利用存储过程实现循环批量建表
MySQL中利用存储过程实现循环批量建表
11035 1
|
6月前
|
存储 XML 安全
基于MySQL 实现通用分页存储过程(下篇-超详细)(下)
基于MySQL 实现通用分页存储过程(下篇-超详细)
38 0
|
8月前
|
存储 关系型数据库 MySQL
MySQL存储过程中双层游标嵌套循环实例
MySQL存储过程中双层游标嵌套循环实例