2013-04-01 16 views
0

我正在嘗試爲MySQL 5.1創建一個過程,它將數據庫名稱作爲參數並在該數據庫中發出MULTI DELETE。我遇到了兩個問題,我不知道如何解決:在多表上使用動態數據庫名稱的過程刪除

  • USE不能在準備好的語句中使用。當我嘗試時,我得到「這個命令在準備好的語句協議中不被支持」。
  • 多個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中那樣)。

回答

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 

我相信我已經試過了,它失敗了,但現在看來是工作: -/

+0

你知道你可以接受你自己的答案....? –

相關問題