DELIMITER // CREATE OR REPLACE PROCEDURE get_anytable( IN p_token VARCHAR(100), IN p_tablename VARCHAR(20) ) /* 萬用取值程式, 主要給 amis picker GET 查詢使用 Description: 根據傳入的 token 驗證使用者身份後,返回指定表的數據 Build Date : 2023/07/19 (MariaDB 版本) Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek) */ BEGIN DECLARE v_userid VARCHAR(100); DECLARE v_sql TEXT; -- 根據傳入的 token 取得 userid SELECT userid INTO v_userid FROM sys_users WHERE token = p_token LIMIT 1; -- 設置默認返回值 SELECT 0 AS code, 'ok' AS msg; -- 構建動態SQL IF v_userid IS NULL OR v_userid = '' THEN -- 無效token時返回空結果 SET v_sql = CONCAT('SELECT * FROM ', p_tablename, ' WHERE 1=0'); ELSE -- 有效token時返回完整數據 SET v_sql = CONCAT('SELECT * FROM ', p_tablename); END IF; -- 執行動態SQL SET @dynamic_sql = v_sql; PREPARE stmt FROM @dynamic_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ;