【发布时间】:2020-12-26 22:03:44
【问题描述】:
我想使用 while 循环更改分区表的名称。
DELIMITER $$
drop procedure if exists dowhile$$
CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 0;
WHILE v1<10 DO
SET @pp=concat('p',v1);
select @pp;
SET v1 = v1 + 1;
END WHILE;
END$$
DELIMITER ;
#OUTPUT
p0
p1
p2
p3
p4
p5
p6
p7
p8
p9
在这个脚本中,它打印了正确的分区名称,但是当我想通过更改下面的查询来使用变量作为分区的名称时,错误提示变量附近的 SQL 语法错误。
select count(*) from KJ.MAIN_TABLE partition(@pp);
【问题讨论】:
-
分区名是SQL中的identifier,就像表名是identifier一样。标识符必须包含在 SQL 文本中。标识符不能作为 SQL 语句中的 值 提供。 (
@pp是包含 value 的用户定义值)。为了将值合并到 SQL 文本中,我们可以将 SQL 文本生成为字符串,然后使用 PREPARE、EXECUTE、DEALLOCATE 将该字符串作为动态 SQL 执行。参考:dev.mysql.com/doc/refman/5.7/en/prepare.html -
参见 MySQL 参考手册中的示例“这是一个额外的示例,演示了如何选择在运行时执行查询的表,”dev.mysql.com/doc/refman/5.7/en/sql-prepared-statements.html
-
好点@spencer7593,明白了。
-
“解决方案”应该作为答案发布,而不是作为对问题的编辑。这是 StackOverflow 的规范协议...
标签: mysql while-loop