【问题标题】:Procedure to USE dynamic database name on Multi Table Delete在多表删除上使用动态数据库名称的过程
【发布时间】:2013-04-01 19:09:27
【问题描述】:

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

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

代码示例如下:

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 过程。但是,如果在 MySQL 中可行的话,我不反对使用其他语言的过程(就像您可以在 PostgreSQL 中那样)。

【问题讨论】:

    标签: mysql stored-procedures sql-delete mysql-5.1


    【解决方案1】:

    在尝试使用 MULTI DELETE 时,我似乎需要使用 dbname 和表 ALIAS。

    DELETE dbname.talias FROM dbname.t as talias INNER JOIN dbname.t2 as t2 ON talias.f_id = t2.id
    

    我相信我已经尝试过了,但它失败了,但它现在似乎正在工作:-/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多