在MySQL 5.0中创建MySQL空间过程

在MySQL 5.0中创建MySQL空间过程,mysql,stored-procedures,geospatial,spatial,procedure,Mysql,Stored Procedures,Geospatial,Spatial,Procedure,我发现了一个程序,它几乎完全符合我在本页中所寻找的内容: 我对它进行了一些修改,以便实际使用我的数据库,但每次我创建函数时,它都会抛出一个错误。我假设我不能在MySQL 5.0中创建一个过程,而是必须创建一个函数。我只是需要一点帮助。我对为MySQL创建过程非常陌生 DELIMITER $$ DROP FUNCTION IF EXISTS `GEODIST` $$ CREATE FUNCTION `GEODIST`( mylat float, mylong float, dist int )

我发现了一个程序,它几乎完全符合我在本页中所寻找的内容:

我对它进行了一些修改,以便实际使用我的数据库,但每次我创建函数时,它都会抛出一个错误。我假设我不能在MySQL 5.0中创建一个过程,而是必须创建一个函数。我只是需要一点帮助。我对为MySQL创建过程非常陌生

DELIMITER $$
DROP FUNCTION IF EXISTS `GEODIST` $$
CREATE FUNCTION `GEODIST`( mylat float, mylong float, dist int )
BEGIN
    DECLARE lon1 float; 
    DECLARE lon2 float;
    DECLARE lat1 float; 
    DECLARE lat2 float;

set lon1 = mylon - dist/abs(cos(radians(mylat))*69);
set lon2 = mylon + dist/abs(cos(radians(mylat))*69);
set lat1 = mylat - (dist/69);
set lat2 = mylat + (dist/69);

SELECT destination.*,3956 * 2 * ASIN(SQRT( POWER(SIN((orig.lat -dest.lat) * pi()/180 / 2), 2) +COS(orig.lat * pi()/180) * COS(dest.lat * pi()/180) *POWER(SIN((orig.lon -dest.lon) * pi()/180 / 2), 2) )) as distance FROM users destination, users origin WHERE origin.id=userid
and destination.longitude between lon1 and lon2 and destination.latitude between lat1 and lat2 
having distance < dist ORDER BY Distance limit 10;

END $$
分隔符$$
DROP函数(如果存在)`GEODIST`$$
创建函数“GEODIST”(mylat浮点、mylong浮点、dist int)
开始
宣布lon1浮动;
宣布lon2浮动;
宣布lat1浮动;
宣布lat2浮动;
设置lon1=mylon-dist/abs(cos(弧度(mylat))*69;
设置lon2=mylon+dist/abs(cos(弧度(mylat))*69);
设置lat1=mylat-(dist/69);
设置lat2=mylat+(dist/69);
选择destination.*3956*2*ASIN(SQRT(功率(SIN((orig.lat-dest.lat)*pi()/180/2),2)+COS(orig.lat*pi()/180)*COS(dest.lat*pi()/180)*功率(SIN((orig.lon-dest.lon)*pi()/180/2))作为与用户目的地的距离,用户来源地,其中origin.id=userid
和destination.lon1和lon2之间的经度和destination.lation之间的纬度
距离小于距离限制10的距离顺序;
结束$$
运行此代码时会引发一个错误:

错误SQL查询:文档

创建函数
GEODIST
(

mylat浮点、mylong浮点、dist INT)开始声明lon1浮点

宣布lon2浮动

宣布lat1浮动

宣布lat2浮动

设置lon1=mylon-dist/ABS(COS(弧度(mylat))*69

设置lon2=mylon+dist/ABS(COS(弧度(mylat))*69)

设置lat1=mylat-(dist/69)

设置lat2=mylat+(dist/69)

选择目的地。*,3956*2*ASIN(SQRT)功率(SIN)(原始纬度 -dest.lat*PI()/180/2,2)+COS(orig.lat*PI()/180)*COS(dest.lat*PI()/180)*功率(SIN((orig.lon-dest.lon)* PI()/180/2),2)),作为距离用户目的地的距离,用户 origin,其中origin.id=userid,destination.longitude在lon1之间 lat1和lat2之间的纬度 距离小于距离限制10的距离顺序

END$$MySQL:Documentation

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 快开始了 申报lon1浮动; 宣布lon2浮动; 在第2行声明lat1浮动

编辑:下面有人建议我将此更改为我已执行的过程,但它抛出了错误:

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 在第3行的“”附近


如果不需要从存储例程返回值,则需要创建一个过程,只需将
create FUNCTION
更改为
create procedure

另外,需要添加
RETURNS
子句来指定结果数据类型,并在函数体中添加
RETURN
子句来设置结果值


.

谢谢,我刚收到。我确实更改了它,但它仍然为我抛出相同的错误。对不起,现在我得到一个不同的错误。我刚刚更新了问题。谢谢你的帮助!没关系,我已经准备好了。令人惊叹的!谢谢你的帮助!