MySQL 游標是儲存程序中處理結果集的重要機制,允許逐行讀取查詢結果。完整的游標生命週期包含四個步驟:
-- 1. 宣告游標
DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM employees;
-- 2. 開啟游標
OPEN calc_bonus;
-- 3. 使用游標(迴圈讀取)
FETCH calc_bonus INTO var_id, var_salary, var_comm;
-- 4. 關閉游標
CLOSE calc_bonus;
BEGIN
DECLARE temp_user_id INT DEFAULT NULL;
DECLARE done INT DEFAULT 0;
-- 宣告游標
DECLARE temp_cur CURSOR FOR
SELECT f_user_id FROM table_test WHERE f_user_id = 1;
-- 宣告 NOT FOUND 異常處理器(游標讀完時觸發)
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN temp_cur;
-- 讀取第一行
FETCH temp_cur INTO temp_user_id;
-- 迴圈處理
WHILE done <> 1 DO
-- 這裡處理每一行資料的業務邏輯
-- 例如:UPDATE、INSERT 等操作
-- 讀取下一行
FETCH temp_cur INTO temp_user_id;
END WHILE;
CLOSE temp_cur;
END
雖然游標功能強大,但在 MySQL 中效率較集合操作(SET-based operations)低。能用單一 SQL 解決的盡量避免使用游標。若必須使用,建議: