MySQL 儲存過程是一段預定義的 SQL 語句,它們被存儲在數(shù)據(jù)庫中并被多次調(diào)用。儲存過程可以包含條件、循環(huán)、變量等等的 SQL 語句。
儲存過程在實際開發(fā)中的應用非常廣泛,比如我們可以利用儲存過程遍歷每一行數(shù)據(jù)。
-- 創(chuàng)建 test 表 CREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); -- 插入數(shù)據(jù) INSERT INTO test (name) VALUES ('Tom'), ('Jerry'), ('Jack'), ('Lucy'), ('Lily');
上面我們創(chuàng)建了一個名為 test 的表,并插入了五行數(shù)據(jù)。下面我們來寫一個儲存過程,遍歷這個表里的每一行數(shù)據(jù):
DELIMITER $$ CREATE PROCEDURE traverse_test() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE id INT; DECLARE name VARCHAR(50); DECLARE cur CURSOR FOR SELECT id, name FROM test; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; loop_start: FETCH cur INTO id, name; IF done THEN LEAVE loop_end; END IF; -- 你的操作 -- 可以在這里對每一行數(shù)據(jù)進行操作,比如輸出、保存等等 SELECT id, name; GOTO loop_start; END LOOP loop_end; CLOSE cur; END $$
在上述代碼中,我們先定義了一個名為 done 的變量,用于表示是否循環(huán)完畢,接著定義了一個名為 cur 的游標,用于將表中所有數(shù)據(jù)查詢出來。
在 for 循環(huán)中,我們使用了 FETCH 語句來遍歷每一行數(shù)據(jù),并對每一行數(shù)據(jù)進行操作,如 select id, name 或者其它操作。
最后我們執(zhí)行游標的 CLOSE 語句,結束程序的執(zhí)行。執(zhí)行儲存過程 traverse_test() 即可遍歷 test 表中的每一行數(shù)據(jù)。