0

我在firebird中有这个SQL代码并且工作得很好

set term !! ;

EXECUTE BLOCK AS
declare variable vtable_name VARCHAR(31);
BEGIN
for select table_name from mytables into :vtable_name
execute statement 'DROP TABLE ' || :vtable_name || ';';
END!!

set term ; !!

现在我正在尝试在 Mysql 数据库中做一个非常相似的事情。阅读 mysql 手册我阅读了关于 LOOP 语句和关于 WHILE 语句的信息。

这是我的mysql代码,但不起作用

WHILE (SET @vtable_name  = (select table_name from mytables))
DO
  BEGIN
   DROP TABLE @vtable_name;
  END;
END WHILE;
4

1 回答 1

1

您的问题是“(从 mytables 中选择 table_name)”语句将返回一个结果集,并且您将整个结果集分配给一个变量。第二个问题是 DROP / SELECT 语句将不允许动态表名/列名。

可以使用动态sql,见demo:http ://sqlfiddle.com/#!2/cf278/1

在 mysql sproc 中使用变量作为表名

于 2013-02-10T07:35:06.140 回答