我有一个准备好的语句,我想直接对MySQL服务器执行;
USE `testdb`;
SET @t = (
SELECT GROUP_CONCAT(mytab.TABLE_NAME SEPARATOR ', ')
FROM (SELECT * FROM information_schema.TABLES as `m` WHERE table_schema = 'testdb' AND table_name LIKE 'mi_%' LIMIT 0,1) as `mytab`
);
PREPARE `stmt1` FROM 'DROP TABLE t';
EXECUTE `stmt1` USING @t;
DEALLOCATE PREPARE `stmt1`;
但是,当我执行它时,它会在EXECUTE行上返回一个错误,说
错误代码:1210。EXECUTE的参数不正确
对于我在做错的事情,我将不胜感激。
我有MySQL版本5.1.68
您可以通过在执行之前准备完全静态的DDL来解决您的问题。样本:
表格:
mysql>显示表格; + ---------------- + | Tables_in_test | + ---------------- + | 一个| | b | + ---------------- + 设置2行(0.00秒)
和您的(很少修改的)SQL:
mysql> SET @t =(SELECT GROUP_CONCAT(mytab.TABLE_NAME SEPARATOR',')FROM(SELECT * FROM information_schema.TABLES as`m` WHERE table_schema ='test'AND table_name LIKE'a %'LIMIT 0,1)as` mytab`); 查询确定,受影响的0行(0.06秒) mysql> select @t; + ------ + | @t | + ------ + | 一个| + ------ + 设置1行(0.00秒)
现在,DDL:
mysql> set @drop = CONCAT('DROP TABLE',@t); 查询确定,受影响的0行(0.00秒) mysql> select @drop; + -------------- + | @drop | + -------------- + | 删除表a | + -------------- + 设置1行(0.00秒)
最后,准备好的语句:
mysql>从@drop准备`stmt1` 查询正常,受影响的0行(0.00秒) 语句已准备好 mysql> EXECUTE`stmt1`; 查询正常,受影响的0行(0.00秒)
你会得到:
mysql>显示表格; + ---------------- + | Tables_in_test | + ---------------- + | b | + ---------------- + 设置1行(0.00秒)
您只能使用一个变量(已添加此变量是@drop
为了增加可读性)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句