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 ;