【表名或者表分区名作为变量】存储过程遇到表名或者表分区名作为变量

本文介绍了在数据库存储过程中如何正确处理表名或表分区名作为变量的情况。当需要根据变量动态清理或操作表数据时,直接使用变量会导致SQL语法错误。正确的做法是利用CONCAT函数将SQL语句与变量拼接,并通过PREPARE和EXECUTE语句来执行动态SQL,确保了SQL的正确解析和执行。

表名或者表分区名作为变量

当编写存储过程时,遇到表分区名需要通过变量传入,如遇到需要定时清理分区表的数据时,每次需要清理的表分区名字都是通过与当前时间计算得出的,那如果在存储过程的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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值