DELIMITER //

CREATE PROCEDURE sysexec (
  IN p_token VARCHAR(100),
  IN p_sql TEXT
)
BEGIN
  DECLARE v_userid VARCHAR(100);
  DECLARE v_exstr TEXT;

  -- 根據傳入的 token 取得 userid
  SET v_userid = '';
  SELECT userid INTO v_userid FROM sys_users WHERE token = p_token;

  IF COALESCE(v_userid, '') = '' THEN
    SELECT 9 AS code, '請先登入系統再執行!!' AS msg;
    SELECT '';
  ELSEIF LOCATE('delete ', p_sql) > 0 OR LOCATE('drop ', p_sql) > 0 THEN
    SELECT 4 AS code, '內含不允許執行的 SQL 語法, 請重新輸入?!' AS msg;
    SELECT '';
  ELSE
    BEGIN
      DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN
        SELECT 9 AS code, '語法有錯，請檢查語法後再重新執行!!' AS msg;
        SELECT '';
      END;

      SELECT 0 AS code, '成功執行 SQL 語法' AS msg;
      SET @v_exstr = p_sql;
      PREPARE v_exstr FROM @v_exstr;
      EXECUTE v_exstr;
    END;
  END IF;
  
END //

DELIMITER ;
