DELIMITER // CREATE OR REPLACE PROCEDURE sys_transfer_userroles2owned() BEGIN /* function : 配合 amis 的 transfer 元件, 將userroles 寫入暫存在 owned 欄位 description: 本程式基本上只會很低頻率的使用, 因為程式的 SOP 是由 owned -> userrole 不會逆向執行 build date : 2021/10/22 modify history item who date modify docs ==== ========== ========== ================================================ 1 michael 2021-10-17 新增 2 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek) */ DECLARE v_done INT DEFAULT FALSE; DECLARE v_roleid VARCHAR(100); DECLARE v_userids TEXT; -- 宣告游標,按 roleid 分組取得所有 userid DECLARE cur CURSOR FOR SELECT roleid, GROUP_CONCAT(userid SEPARATOR ',') FROM sys_userroles GROUP BY roleid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO v_roleid, v_userids; IF v_done THEN LEAVE read_loop; END IF; -- 更新 owned 欄位 UPDATE sys_roles SET owned = v_userids WHERE roleid = v_roleid; END LOOP; CLOSE cur; END // DELIMITER ;