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 ;