iT邦幫忙

0

MySQL 批次刪除不同table的資料

  • 分享至 

  • xImage

各位前輩好:
小弟是個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 ;

請前輩協助了
先謝謝大家

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
wonton
iT邦高手 6 級 ‧ 2017-02-09 10:20:06

如果不能用變數名稱當作變數,則需要組成字串再執行。這個連結有一些範例
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

我要發表回答

立即登入回答