【问题标题】:MySQL error declaring a FLOAT(10,6)MySQL 错误声明 FLOAT(10,6)
【发布时间】:2017-04-21 12:03:26
【问题描述】:

我在第 5 行有一个错误,不确定是什么错误。该程序的整体效果将在当前玩家 lat lng 的设定正方形半径内创建树和建筑物。如果在此之后还有任何其他错误,我将不胜感激,如果你能指出这些。

CREATE PROCEDURE PupulateLatLng(lat FLOAT(10,6), lng FLOAT(10,6), radius INT)
    BEGIN
        DECLARE mlat FLOAT(10,6);
        SET mlat = 0.00084;
        DECLARE mlng FLOAT(10,6);
        SET mlng = 0.00118;
        DECLARE scope FLOAT(10,6);
        SET scope = Floor(radius/100);
        DECLARE baselat FLOAT(10,6);
        SET baselat = Floor(lat/mlat) * mlat;
        DECLARE baselng FLOAT(10,6);
        SET baselng = Floor(lng/mlng) * mlng;
        DECLARE dlat FLOAT(10,6);
        DECLARE dlng FLOAT(10,6);
        DECLARE dlatunits INT;
        SET dlatunits = -scope;
        loop1: LOOP
          SET dlatunits = dlatunits + 1;
              DECLARE dlngunits INT;
              SET dlngunits = -scope;
              loop2: LOOP
                  SET dlngunits = dlngunits + 1;
                  dlat = dlatunits * mlat;
                  dlng = dlngunits * mlat;
                  DECLARE rand FLOAT(10,6);
                  SET rand = rand();
                  IF (rand <= 0.3) THEN
                    GenerateTree(Floor((lat + dlat)*1000000)/1000000, Floor((lng + dlng)*1000000)/1000000);
                  ELSEIF (rand <= 0.4) THEN
                    GenerateNPCBuilding(Floor((lat + dlat)*1000000)/1000000, Floor((lng + dlng)*1000000)/1000000);            
                IF dlngunits < scope THEN
                  ITERATE loop2;
                END IF;
                LEAVE loop2;
              END LOOP loop2;
          IF dlatunits < scope THEN
            ITERATE loop1;
          END IF;
          LEAVE loop1;
        END LOOP loop1;
    END

【问题讨论】:

  • 请不要将答案编辑到问题中,因为此后问题将没有任何意义。

标签: mysql database procedure


【解决方案1】:

declare 语句必须在 begin - end 块内的复合语句语法中出现 before any other statement。由于您将declareset 混合在一起,因此您会收到第二个declare 的错误消息。

正确的语法是将所有声明都放在顶部:

    ...
    DECLARE mlat FLOAT(10,6);
    DECLARE mlng FLOAT(10,6);
    DECLARE scope FLOAT(10,6);
    DECLARE baselat FLOAT(10,6);
    DECLARE baselng FLOAT(10,6);
    DECLARE dlat FLOAT(10,6);
    DECLARE dlng FLOAT(10,6);
    DECLARE dlatunits INT;
    SET mlat = 0.00084;
    SET mlng = 0.00118;
    SET scope = Floor(radius/100);
    SET baselat = Floor(lat/mlat) * mlat;
    SET baselng = Floor(lng/mlng) * mlng;
    SET dlatunits = -scope;
    ...

或者,您可以使用declare 语句的default 子句为变量分配默认值,而无需额外的set

DECLARE mlat FLOAT(10,6) DEFAULT 0.00084;

【讨论】:

  • 我已经更新了代码,但现在在第 32 行显示错误??
  • 如果您有任何后续问题,请在他们自己的单独问题中提出,并正确指出错误消息。
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 2015-02-20
  • 2023-03-28
  • 2013-07-19
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多