Sir*_*sha 7 mysql mysql-error-1064
我在MySQL工作台中使用SQL编辑器创建了一个Spatial表.要填写此表,以下是我正在使用的代码.
CREATE PROCEDURE fill_points(
IN size INT(10)
)
BEGIN
DECLARE i DOUBLE(10,1) DEFAULT size;
DECLARE lon FLOAT(7,4);
DECLARE lat FLOAT(6,4);
DECLARE position VARCHAR(100);
-- Deleting all.
DELETE FROM Points;
WHILE i > 0 DO
SET lon = RAND() * 360 - 180;
SET lat = RAND() * 180 - 90;
SET position = CONCAT( 'POINT(', lon, ' ', lat, ')' );
INSERT INTO Points(name, location) VALUES ( CONCAT('name_', i), GeomFromText(position) );
SET i = i - 1;
END WHILE;
END
Run Code Online (Sandbox Code Playgroud)
当我执行它时,它显示错误
错误代码:1064.您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"END"附近使用正确的语法
执行声明
CALL fill_points(1000);
显示相同的错误
我甚至不知道我的行进方式是否正确.
有谁能够帮我...
Kon*_*rak 13
你结束了整个查询吗?尝试设置分隔符,并在END之后使用它,以便服务器知道您完成了命令.
delimiter //
CREATE PROCEDURE fill_points(
IN size INT(10)
)
BEGIN
DECLARE i DOUBLE(10,1) DEFAULT size;
DECLARE lon FLOAT(7,4);
DECLARE lat FLOAT(6,4);
DECLARE position VARCHAR(100);
-- Deleting all.
DELETE FROM Points;
WHILE i > 0 DO
SET lon = RAND() * 360 - 180;
SET lat = RAND() * 180 - 90;
SET position = CONCAT( 'POINT(', lon, ' ', lat, ')' );
INSERT INTO Points(name, location) VALUES ( CONCAT('name_', i), GeomFromText(position) );
SET i = i - 1;
END WHILE;
END //
delimiter ;
Run Code Online (Sandbox Code Playgroud)
虽然DELETE FROM TABLE从表中删除所有数据,TRUNCATE table但速度更快.除非你有充分的理由使用DELETE(它们存在),否则TRUNCATE可能就是你想要的.