【问题标题】:While Loop to change the name of partition table in MYSQLWhile循环更改MYSQL中分区表的名称
【发布时间】: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


【解决方案1】:

解决方案

通过使用 Prepare、Execute 和 Deallocate。我有正确的语法

SET @query=concat('select count(*) from KJ.MAIN_TABLE partition(',@pp,')');
prepare stmt1 from @query;
execute stmt1;
DEALLOCATE PREPARE stmt1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2020-08-19
    • 1970-01-01
    • 2013-08-14
    相关资源
    最近更新 更多