在MySQL 5.0中创建MySQL空间过程
我发现了一个程序,它几乎完全符合我在本页中所寻找的内容: 我对它进行了一些修改,以便实际使用我的数据库,但每次我创建函数时,它都会抛出一个错误。我假设我不能在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 )
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
子句来设置结果值
.谢谢,我刚收到。我确实更改了它,但它仍然为我抛出相同的错误。对不起,现在我得到一个不同的错误。我刚刚更新了问题。谢谢你的帮助!没关系,我已经准备好了。令人惊叹的!谢谢你的帮助!