预备语句Mysql

西蒙·R

我有一个准备好的语句,我想直接对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

阿尔玛·杜(Alma Do)

您可以通过在执行之前准备完全静态的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章