mysql使用存储过程创建动态表名及参数处理

关于mysql的存储如何创建和使用:点击这里存储过程创建与使用有说明

直接上干货,我这里直接使用的是带有参数的创建

SQL如下:
DELIMITER $
CREATE PROCEDURE spatialStored(IN years VARCHAR(32))
BEGIN

-- 创建动态表,获取当前日期
SET @sql_create_table = CONCAT(
	'CREATE TABLE IF NOT EXISTS sx_test_a', DATE_FORMAT(CURDATE(),'%Y_%c'),
"(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `number` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '编号',
  `indexes` int(11) DEFAULT NULL COMMENT '索引',
  `date_time` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '时间',
  `monitor_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '监测因子',
  `monitor_value` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '监测值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"
);
	
PREPARE sql_create_table FROM @sql_create_table;   
EXECUTE sql_create_table; 
	
-- 动态插入语句	
SET @number = '编号001', @indexes = 1, @dateTime = years, @monitorName = '氮气', @monitorValue = '11.2345';
	SET @sql_oper_revcord = CONCAT(
	"INSERT INTO sx_test_a", DATE_FORMAT(CURDATE(),'%Y_%c'), 
	" (`number`, `indexes`, `date_time`, `monitor_name`, `monitor_value`) 
		values (@number, @indexes, @dateTime, @monitorName, @monitorValue)");

PREPARE sql_oper_revcord FROM @sql_oper_revcord;   
EXECUTE sql_oper_revcord; 	
	
END $

-- 执行存储过程
CALL spatialStored('2021-12-24 00:00:00');

效果如下:

在这里插入图片描述

在这里插入图片描述

详解:创建存储过程的语法就不用多说了,挑一些过程里面的内容解释一下
sx_test_a是基础表,这没什么好说的
SET @sql_create_table = CONCAT(‘xxx’,‘xxx’,…) 这里可以理解为,声明了一个名为@sql_create_table的变量,我们给这个变量赋值为 = 等号后面的内容
CONAT():是字符串拼接的函数
DATE_FORMAT():用于处理日期数据所展示的格式
CURDATE():返回当前的日期
PREPARE sql_create_table FROM @sql_create_table; 执行预定义的sql
EXECUTE sql_create_table; 释放掉数据库连接

SET @number = ‘编号001’, @indexes = 1 这里要注意点是,number是字符类型,所以给的要是字符类型,如果类型不一致会抛出字段值插入不进去,执行异常。indexes为int类型,所以给的是数值类型,保证建表的类型与插入声明的变量使用的类型一致
@dateTime = years 使用调用过程带来的参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子非我鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值