我想實現的是一個存儲過程,它返回一個表中所有缺少的id的記錄集。 例如:MySQL存儲過程的變量表名和檢索丟失的記錄
--------------------
| games |
--------------------
| id | game name |
--------------------
| 1 | first game |
| 2 | second game |
| 5 | fifth game |
| 10 | tenth game |
-------------------
這將導致:
----------
| result |
----------
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
----------
注意這裏是可以處理多個表,所以我想只有一個需要維護的存儲過程,所以表名應該動態添加。
我在存儲過程中發現了幾個關於預準備語句,參數和循環的教程,但是我沒有得到該組合的工作方式。
我心裏有應用的邏輯是:
- 表中獲得的最高ID
- 遍歷表,並檢查迭代器存在的ID
- 如果不是,添加到結果集,並返回結果循環完成
此設置後是我走到這一步:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_missing_ids`(IN in_kind varchar(15), OUT out_result int)
BEGIN
DECLARE highest_id INT;
DECLARE i INT;
DECLARE check_id INT;
SET @highestid = CONCAT("(CALL get_highest_id('", in_kind, "',@id)");
PREPARE stmt1 FROM @highestid;
SET highest_id = (EXECUTE stmt1);
WHILE i < highest_id DO
SET @checkid = CONCAT("SELECT COUNT(*) FROM ", in_kind, " WHERE id = ", i, ")");
PREPARE stmt2 FROM @checkid;
SET check_id = (EXECUTE stmt2);
IF check_id = 0 THEN
SELECT i;
END IF;
END WHILE;
END
誰能解釋我如何讓這個組合工作?
你有什麼到目前爲止 – Drew
我投票關閉這一問題作爲題外話,因爲這裏是我的規格,所以請做 – Drew
@Drew,我補充說,我現在有足夠 – stijnpiron