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 ;