存储过程中怎么产生随机表名?

ameny 2005-12-05 12:34:45
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`takeit`$$
CREATE PROCEDURE `takeit`(in RandomString char(20))
BEGIN
create table RandomString (MyValue int);
END$$

DELIMITER ;


我 call takeit ("asdfasd");
可是产生的表名还是RandomString?怎么办?
...全文
300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ameny 2005-12-10
  • 打赏
  • 举报
回复
大哥,如果我直接执行如
set @s = CONCAT('create table sssss (MyValues int)');
prepare stmt1 from @s;
execute stmt1;
是正确可行的,但是如果我把这东西放到procedure中就会出错,大哥说不应将表名做为参数传入,可这部分并不是我能管的范围,上面已经生成了一个字符串(但我知道他是随机生成的)要我用处理过程创建一个用随机字符串作为表名的表,我该怎么办?
ameny 2005-12-08
  • 打赏
  • 举报
回复
阿哥啊,還是不行啊,出錯了。
shuixin13 2005-12-08
  • 打赏
  • 举报
回复
你不应将表名做为参数传入


set @s=CONCAT('create table ', RandomString, ' (MyValues int)');

prepare stmt1 from @s;

execute stmt1
ameny 2005-12-08
  • 打赏
  • 举报
回复
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`takeit`$$
CREATE PROCEDURE `takeit`(in RandomString character(20))
BEGIN
set @a=RandomString;
set @s='create table ? (MyValues int)';

prepare stmt1 from @s;

execute stmt1 using @a;

deallocate prepare stmt1;
END$$

DELIMITER ;
shuixin13 2005-12-07
  • 打赏
  • 举报
回复
呵呵,
只能用动态 SQL

看看我的这个 BLOG


MySQL 实现 Ms SQL 的 sp_executesql
http://borland.mblogger.cn/shuixin13/posts/25911.aspx

56,677

社区成员

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

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