[英]How to create and execute procedures in MySQL workbench
我在 MySQL 工作台中使用 SQL 編輯器創建了一個空間表點。 要填寫此表,以下是我正在使用的代碼。
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
當我執行它時,它顯示錯誤
錯誤代碼:1064。您的 SQL 語法有誤; 查看與您的 MySQL 服務器版本對應的手冊,了解在第 1 行的“END”附近使用的正確語法
執行聲明
CALL fill_points(1000);
顯示相同的錯誤
我什至不知道我的做法是否正確。
有誰能夠幫助我...
你結束了整個查詢嗎? 嘗試設置一個分隔符,並在 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 ;
雖然DELETE FROM TABLE
確實會從表中刪除所有數據,但TRUNCATE table
會更快。 除非您有充分的理由使用DELETE
(它們存在),否則TRUNCATE
可能就是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.