DELIMITER //
CREATE OR REPLACE PROCEDURE sys_transfer_owned2userroles(
  IN p_para_roleid VARCHAR(100)
)
BEGIN
  /*
    function   : 配合 amis 的 transfer 元件, 將暫存在 owned 欄位的值, 寫到 userroles
    description: 目前先配合 omi_api 的存檔後機制(sys_transaction) 執行
    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_owned TEXT;
  
  -- 取得 owned 欄位值
  SELECT owned INTO v_owned FROM sys_roles WHERE roleid = p_para_roleid;
  
  -- 先刪除現有記錄
  DELETE FROM sys_userroles WHERE roleid = p_para_roleid;
  
  -- 使用 STRING_SPLIT 函數插入新記錄
  IF v_owned IS NOT NULL AND v_owned != '' THEN
    SET @sql = CONCAT(
      'INSERT INTO sys_userroles (roleid, userid) ',
      'SELECT ''', p_para_roleid, ''', value ',
      'FROM STRING_SPLIT(''', v_owned, ''', '','') ',
      'WHERE value != '''';'
    );
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END IF;
END //
DELIMITER ;