• 全部
...

请教 mysql存储过程中 传递表名作参数怎么整啊?

蜗牛慢慢向上爬 2014-11-14 06:50:56
DELIMITER //
CREATE PROCEDURE addjiedian(IN pid int, IN zijidianname VARCHAR(10),IN tb_name VARCHAR(10))
begin

DECLARE dbName VARCHAR(30);
SET dbName = tb_name;

SELECT @myLeft:=lft,@myRight := rgt FROM dbName
WHERE id=pid;
UPDATE dbName SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE dbName SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO dbName(name, lft, rgt) VALUES(zijidianname, @myLeft + 1, @myLeft +2);

END
//
DELIMITER ;



这个不对,请教大家 ,谢谢!
...全文
给本帖投票
829 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2014-11-16
  • 打赏
  • 举报
回复
set _sql = concat('insert into ', _tableName, ' values(', id, ')'); set @sql = _sql; prepare s2 from @sql; execute s2; deallocate prepare s2;
卖水果的net 2014-11-16
  • 打赏
  • 举报
回复
拼接动态SQL。
Rotel-刘志东 2014-11-15
  • 打赏
  • 举报
回复
mysql是不支持表名和列名作为变量的。 只有通过prepare ,execute拼接字符串sql来执行。
ACMAIN_CHM 2014-11-15
  • 打赏
  • 举报
回复
引用 3 楼 A9925 的回复:
[quote=引用 1 楼 ACMAIN_CHM 的回复:] 只有通过prepare ,execute拼接字符串sql来执行。
那我这个怎么改啊? 不太明白 [/quote]下载MYSQL的官方免费手册,然后搜索 PREPARE,然后看例子。
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
只有通过prepare ,execute拼接字符串sql来执行。
那我这个怎么改啊? 不太明白
ACMAIN_CHM 2014-11-14
  • 打赏
  • 举报
回复
MYSQL中不支持表名,列名为变量 。 可以通过 PREPARE, EXECUTE 来执行事先拼接好的字符串中的SQL语句。具体可以参考MYSQL官方手册的例子。

56,803

社区成员

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部