MySQL错误声明FLOAT(10,6)

时间:2017-04-21 12:03:27

标签: mysql database procedure

我在第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

1 个答案:

答案 0 :(得分:0)

public static List<int> RemoveSmallest(List<int> numbers) { if(numbers == null) throw new ArgumentNullException("null argument"); if (numbers.Count < 1) return numbers; var newList = new List<int>(); var lowest = numbers[0]; // treat this as the smallest for (int i = 1; i < numbers.Count; i++) { if (numbers[i] < lowest) // compare it against other elements { lowest = numbers[i]; // update lowest } } foreach (var num in numbers) { if (num != lowest) // dont add the lowest { newList.Add(num); } } return newList; } 语句必须在declare - begin块内的复合语句语法中before any other statement。由于您将enddeclare混合在一起,因此会收到第二个set的错误消息。

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

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; ... 语句的default子句为变量分配默认值,而无需额外的declare

set