DELIMITER // CREATE OR REPLACE PROCEDURE sys_transfer_rolemenusecurity2owned() BEGIN /* function : 配合 amis 的 transfer 元件, 將 rolemenusecurity 寫入暫存在 owned 欄位 description: 本程式基本上只會很低頻率的使用, 因為程式的 SOP 是由 owned -> rolemenusecurity 不會逆向執行 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_menuid VARCHAR(100); DECLARE v_roleids TEXT; -- 宣告游標,按 menuid 分組取得所有 roleid DECLARE cur CURSOR FOR SELECT menuid, GROUP_CONCAT(roleid SEPARATOR ',') FROM sys_rolemenusecurity GROUP BY menuid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO v_menuid, v_roleids; IF v_done THEN LEAVE read_loop; END IF; -- 更新 owned 欄位 UPDATE sys_menutable SET owned = v_roleids WHERE menuid = v_menuid; END LOOP; CLOSE cur; END // DELIMITER ;