mysql存储过程变量没有被赋值

xiaolongwu1987 2017-03-22 10:37:54
我想做自动碎片整理脚本,

BEGIN
#Routine body goes here...
declare tablename varchar(30);
declare move_sql varchar(30);
declare row int;
获得所有的表名:
declare cur cursor for select table_name from information_schema.tables where table_schema='crm';
先清空整理结果:
delete from shrink_result;
open cur;

my_loop:loop
begin
获得表名:
fetch cur into tablename;
把表名插入到整理结果中,这个结果是正确的,可以看到不同的表名都被塞进来了。
insert into shrink_result (table_name) values(tablename);

可是到这步,tablename这个变量又成个字符串了
## begin optmize operation
optimize table tablename;

end;
END LOOP my_loop;
close cur;
END

报错如下:
operation failed
Table 'crm.tablename' doesn't exist (crm是我在使用的库名。)
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2017-03-23
  • 打赏
  • 举报
回复
怎么老是用变量?这种语句不接受变量的,你看官网文档语法,上面有写可以用变量么? 用 prepare ,是直接拼好处理的 sql set @move_sql=concat('optimize table ', tablename) ;
xiaolongwu1987 2017-03-22
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
看来是 OPTIMIZE TABLE 后不能跟变量,只允许常量。 尝试一下 prepare 是否能解决。
怎样查看是否可以跟变量呢????
xiaolongwu1987 2017-03-22
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
看来是 OPTIMIZE TABLE 后不能跟变量,只允许常量。 尝试一下 prepare 是否能解决。
貌似不行啊,如下: set move_sql='optimize table ?'; select move_sql; select 'test11'; // 正确输出了 prepare stmt from @move_sql; // 报错 select 'test'; execute stmt using @tablename; 调用结果如下: mysql> call auto_shrink; +------------------+ | move_sql | +------------------+ | optimize table ? | +------------------+ 1 row in set (0.00 sec) +--------+ | test11 | +--------+ | test11 | +--------+ 1 row in set (0.00 sec) ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1 mysql>
ACMAIN_CHM 2017-03-22
  • 打赏
  • 举报
回复
看来是 OPTIMIZE TABLE 后不能跟变量,只允许常量。 尝试一下 prepare 是否能解决。
Hx_Moon_ 2017-03-22
  • 打赏
  • 举报
回复
引用 4 楼 linux_PHP_ 的回复:
是不是你提的问题不够清晰啊,没有附上相应的sql,我刚提了个问题一下就有大神帮忙了
回错贴了 ~~~~~~~~~~~~~~
Hx_Moon_ 2017-03-22
  • 打赏
  • 举报
回复
是不是你提的问题不够清晰啊,没有附上相应的sql,我刚提了个问题一下就有大神帮忙了

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧