首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多表删除中使用动态数据库名称的过程

问在多表删除中使用动态数据库名称的过程
EN

Stack Overflow用户
提问于 2013-04-01 19:09:27
回答 1查看 933关注 0票数 0

我试图为MySQL 5.1创建一个过程,该过程将以数据库名作为参数,并在数据库中发出多个DELETE。我遇到了两个我不知道该如何解决的问题:

  • USE不能在准备好的语句中使用。当我尝试时,我得到了“在准备好的语句协议中不支持此命令”。
  • 多个删除不能删除其他数据库中的表。当我尝试,我得到“未知表'x‘在多删除”。

代码示例如下:

代码语言:javascript
复制
DELIMITER $$
CREATE PROCEDURE multi_test (
    IN dbname VARCHAR(20)
)
BEGIN
    SET @us = CONCAT('USE ', dbname, ';');
    PREPARE ustmt FROM @us;
    EXECUTE ustmt;
    DEALLOCATE PREPARE ustmt;
    SET @s = CONCAT('DELETE t FROM ', dbname, '.t as t INNER JOIN ', dbname, '.t2 as t2 IN t.f_id = t2.id');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

同样,这将导致“准备好的语句协议中不支持此命令”。

另一个目标是将其保存在MySQL中--我宁愿不使用连接到MySQL的脚本语言,而只使用一些可以从客户端CLI调用的MySQL过程。但是,我并不反对在其他语言中使用过程(就像在PostgreSQL中那样),如果在MySQL中可以这样做的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-01 19:24:12

在尝试使用多重删除时,我似乎需要使用dbname和表别名。

代码语言:javascript
复制
DELETE dbname.talias FROM dbname.t as talias INNER JOIN dbname.t2 as t2 ON talias.f_id = t2.id

我相信我试过了,但失败了,但现在看来它正在起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15749975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档