Mysql

MySQL 儲存過程 - 0 行受影響

  • May 24, 2017

我有兩個表 i_mast 和 exp_mast。兩個表的結構相同。

+-----------------+
|id INT(5)        |
|name VARCHAR(30) |
|e_date DATE      |
+-----------------+

當 e_date 與目前日期匹配時,我需要將這些行插入到 exp_mast,然後從 i_mast 中刪除這些插入的行。我為此編寫了以下儲存過程:

CREATE PROCEDURE is_expired()
BEGIN
 DECLARE id INT(5);
 DECLARE name VARCHAR(30);
 DECLARE e_date DATE;
 DECLARE n INT;
 DECLARE i INT DEFAULT 0;
 SET n = (SELECT COUNT(*) AS num FROM i_mast WHERE e_date = DATE_FORMAT(NOW(), CURDATE());
 WHILE i < n DO
 SELECT id FROM i_mast WHERE e_date = CURDATE() LIMIT 1 INTO id;
 SELECT name FROM i_mast WHERE e_date = CURDATE() LIMIT 1 INTO name;
 SELECT e_date FROM i_mast WHERE e_date = CURDATE() LIMIT 1 INTO e_date;
 INSERT INTO exp_mast VALUES(id,name,e_date);
 DELETE from i_mast WHERE e_date = CURDATE() LIMIT 1;
 SET i = i + 1;
 END WHILE;
END;

它幫助我創建名為 is_expired() 的常式。我可以在 phpmyadmin 的常式選項卡下看到它。之後我嘗試執行,它給了我這個結果0 rows affected by the last statement inside the procedure.。我有兩條記錄需要今天從 i_mast 中刪除,同時在 exp_mast 中製作副本。但它沒有任何效果。請幫我解決這個問題。

像下面這樣的東西應該​​適合你:

CREATE PROCEDURE is_expired()
BEGIN
 INSERT INTO exp_mast(id,name,e_date)
   SELECT id, name, e_date
   FROM i_mast
   WHERE e_date = CURDATE();

 DELETE from i_mast
 WHERE e_date = CURDATE();
END;

引用自:https://dba.stackexchange.com/questions/174288