MySQL声明浮点时出错(10,6)
我在第5行有一个错误,不确定错误是什么。该程序的整体效果将在当前玩家lat lng设定的方圆半径内创建树木和建筑。如果在此之后还有其他错误,如果您也能指出,我将不胜感激MySQL声明浮点时出错(10,6),mysql,database,procedure,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
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
创建程序PupulateLatLng(横向浮动(10,6)、液化天然气浮动(10,6)、半径INT)
开始
宣布mlat浮动(10,6);
设置mlat=0.00084;
宣布mlng浮动(10,6);
设置mlng=0.00118;
声明范围浮动(10,6);
设置范围=地板(半径/100);
宣布baselat浮动(10,6);
设置基线高度=地板高度(高度/高度)*高度;
宣布基准液化天然气浮子(10,6);
设置基准液化天然气=地板(液化天然气/液化天然气)*液化天然气;
宣布dlat浮动(10,6);
宣布dlng浮动(10,6);
声明dlatunits INT;
设置dlatunits=-scope;
循环1:循环
设置dlatunits=dlatunits+1;
声明dlngunits INT;
设置dlngunits=-scope;
循环2:循环
设置dlngunits=dlngunits+1;
dlat=dlat单位*mlat;
dlng=dlngunits*mlat;
宣布兰德浮动(10,6);
设置rand=rand();
如果(rand,declare
语句必须在begin
-end
块中以复合语句语法出现。由于将declare
与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;
...
或者,您也可以使用declare
语句的default
子句为变量指定默认值,而无需额外的集合
:
DECLARE mlat FLOAT(10,6) DEFAULT 0.00084;
我已经更新了代码,但第32行出现了错误??如果您有任何后续问题,请在他们自己的单独问题中提问,并正确指出错误消息。请不要将答案编辑到问题中,因为问题在这之后将没有任何意义。