簡體   English   中英

MySQL工作台如何創建和執行程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM