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 ;