MySQL 存儲過程允許用戶將一些 SQL 語句存儲在數據庫中,然后通過存儲過程名稱調用這些語句。此外,MySQL 存儲過程中還可以使用光標來處理多行結果集。
MySQL 光標是一個指向結果集中特定行的指針,在存儲過程中,將結果集綁定到光標上,就可以隨時移動光標并處理每一行數據。光標的基本操作包括:打開光標、讀取數據、關閉光標。
下面是一個示例,展示如何在 MySQL 存儲過程中使用光標:
DELIMITER $$ CREATE PROCEDURE `get_users`() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE user_id INT; DECLARE user_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT id, name FROM users; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; repeat_loop: REPEAT FETCH cur INTO user_id, user_name; IF NOT done THEN -- 對每一行數據執行邏輯操作 SELECT CONCAT(user_id, ': ', user_name); END IF; UNTIL done END REPEAT; CLOSE cur; END $$ DELIMITER ;
在上述示例中,首先聲明了三個變量作為語句執行后存儲每行結果的變量。然后,定義了一個光標來存儲所有 users 表中的數據。然后,使用 CONTINUE HANDLER 設置一個處理程序,在到達結果集結尾時將 done 值設置為 TRUE,從而退出循環。接下來,打開光標并開始讀取每行數據。利用 REPEAT LOOP 循環讀取每一行數據并進行邏輯操作。最后,關閉光標。