Mysql
MySQL 儲存過程 - 0 行受影響
我有兩個表 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;