DELIMITER //
CREATE
PROCEDURE `test`.`add_test`()
BEGIN
DECLARE t1 int default date_format(DATE_ADD(NOW(),INTERVAL 1 MONTH),"%Y%m");
DECLARE t2 int default unix_timestamp(date_format(DATE_ADD(NOW(),INTERVAL 2 MONTH),"%Y-%m-01"));
declare s1 varchar(32);
DECLARE _sql VARCHAR(255);
set s1 = CONCAT('p',t1);
set _sql = CONCAT("ALTER TABLE test.`lzc_test` ADD PARTITION(PARTITION ",s1," VALUES LESS THAN (",t2,"))");
############以下为重点############
## 普通变量改为全局变量
set @test_sql = _sql;
## 预处理需要执行的动态SQL,其中stmt是一个变量
PREPARE stmt1 FROM @test_sql;
##执行SQL语句
EXECUTE stmt1;
## 释放掉预处理段
DEALLOCATE PREPARE stmt1 ;
############以上为重点############
END //
DELIMITER
该文章展示了一段MySQL代码,用于创建一个名为`add_test`的存储过程,该过程内部声明并初始化了几个变量,用于构建动态的ALTERTABLE语句,向名为`lzc_test`的表添加新的分区。通过将普通变量转换为全局变量`@test_sql`,然后使用PREPARE和EXECUTE语句执行动态SQL,最后释放预处理语句。这个过程主要用于数据库管理和优化,特别是时间序列数据的分区管理。
1041

被折叠的 条评论
为什么被折叠?



