文章目录
表名或者表分区名作为变量
当编写存储过程时,遇到表分区名需要通过变量传入,如遇到需要定时清理分区表的数据时,每次需要清理的表分区名字都是通过与当前时间计算得出的,那如果在存储过程的sql 直接使用变量传入,sql是无法识别的,直接报错。
例如:
set partName = P2101;
insert into hisTableName select * from currentTableName PARTITION(partName);
上面sql ,表分区名是变量,sql是无法识别,直接报错的。
又例如,当表名是变量时,也是无法识别的。
set currentTableName = t_trans_log;
insert into hisTableName select * from currentTableName ;
正确的写法
需要通过 concat 来拼接sql和变量,然后通过PREPARE stmt2 from @sqlStmt2;然后执行sql.
应是如下图:
set @sqlStmt3 = CONCAT("alter table ", currentTableName, " TRUNCATE1 PARTITION ",partName ,";") ;
PREPARE stmt2 from @sqlStmt2;
EXECUTE stmt2;
本文介绍了在数据库存储过程中如何正确处理表名或表分区名作为变量的情况。当需要根据变量动态清理或操作表数据时,直接使用变量会导致SQL语法错误。正确的做法是利用CONCAT函数将SQL语句与变量拼接,并通过PREPARE和EXECUTE语句来执行动态SQL,确保了SQL的正确解析和执行。

529

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



