各位前輩好:
小弟是個IT新手,目前有遇到一個這樣的問題
我想寫個store procedure 來一次性刪除不同table間的條件資料
procedure如下
DELIMITER $$
CREATE PROCEDURE TMP_DELETE_DATE()
BEGIN
DECLARE t_name VARCHAR(50);
DECLARE t_list CURSOR FOR
SELECT TABLE_NAME
FROM TABLES -- 從這個TABLE讀取我要刪除的TABLE NAME
;
OPEN t_list;
BEGIN
DECLARE EXIT HANDLER FOR 1329 BEGIN END ;
LOOP
FETCH t_list into t_name;
DELETE FROM t_name WHERE DATE = '2017-02-08'; --這裡不能直接用變數名稱當table name
END LOOP;
END;
CLOSE t_list;
END $$
DELIMITER ;
請前輩協助了
先謝謝大家
如果不能用變數名稱當作變數,則需要組成字串再執行。這個連結有一些範例
http://fecbob.pixnet.net/blog/post/38077635
下面是我照著上面的範例改寫的,也可以參考看看
BEGIN
DECLARE t_name VARCHAR(50);
DECLARE t_qry TEXT;
DECLARE t_list CURSOR FOR
SELECT `table_name`
FROM `table_list`
;
OPEN t_list;
BEGIN
DECLARE EXIT HANDLER FOR 1329 BEGIN END ;
LOOP
FETCH t_list into t_name;
SET t_qry = CONCAT('DELETE FROM ',t_name,' WHERE DATE = "2017-02-08"');
SELECT t_qry;
SET @t_qry=t_qry;
PREPARE myDel FROM @t_qry;
EXECUTE myDel;
END LOOP;
END;
CLOSE t_list;
END