首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 預存程序與 Cursor 遊標實戰範例

     編輯:MySQL 資料庫相關知識

範例:統計各群組有效成員數並更新

CREATE PROCEDURE `justifyGroupNum`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
    /* how to run: CALL justifyGroupNum() */
    DECLARE p_group_id INT;
    DECLARE p_num INT;
    DECLARE stopFlag INT DEFAULT 0;

    DECLARE cursor_name CURSOR FOR
        SELECT c_group_id, COUNT(*) AS num
        FROM `t_group_member`
        WHERE c_valid IN (3,4)
        GROUP BY c_group_id;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopFlag = 1;

    OPEN cursor_name;
    REPEAT
        FETCH cursor_name INTO p_group_id, p_num;
        BEGIN
            UPDATE t_groupinfo SET c_member_number = p_num WHERE c_group_id = p_group_id;
        END;
    UNTIL stopFlag = 1
    END REPEAT;
    CLOSE cursor_name;
END;

關鍵點總結

  1. 必須設定遊標的 CONTINUE HANDLER:DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopFlag=1;
  2. 使用 REPEAT ... UNTIL stopFlag = 1 END REPEAT 迴圈,否則不會循環。
  3. 執行方式:CALL justifyGroupNum()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved