关于mysql存储过程中占位符的使用问题

幕后黑手-Boss 2008-11-20 05:04:39
mysql升级,以前4.0,没用过存储过程
现在升级5.x了,终于可以用了
但是使用中发现一个问题
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select * from ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这样的就会报错,也就是说 在 @sql中的 ? 认不出来

如果@sql的值不是sql语句,而是普通的字符串,就没有这个问题,如:
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这个就能整整的显示出来,显示 tt

猜想可能是由于@sql 值为sql语句的问题,哦,就是传说中的预制sql语句
应该怎么样解决呢?
这个参数怎么才能传入呢?
先在这里感谢大家了。
...全文
535 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2008-11-20
  • 打赏
  • 举报
回复
? 不能用在FROM语句后面!!!!

只能在它前面!!!
正确的语句如下:

delimiter ||
Create PROCEDURE t()
BEGIN
set @a = 'tt';
set @sql = concat('select * from ',@a);

PREPARE s from @sql;
EXECUTE s;
DEALLOCATE PREPARE s;
set @a = @sql = NULL;
end||
delimiter ;

WWWWA 2008-11-20
  • 打赏
  • 举报
回复
FROM 中不能用变量吧,用字符串累加吧

56,875

社区成员

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

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