7

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 構文にエラーがあります。1 行目の 'END' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ステートメントの実行

CALL fill_points(1000);

同じエラーが表示されます

自分の進み方が正しいかどうかさえわからない。

誰か助けてくれませんか...

4

1 に答える 1

13

クエリ全体を終了しましたか? delimiterを設定してみて、 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あなたが望むものかもしれません。

于 2012-04-10T07:11:50.257 に答える