Mysql创建函数没有';nt工作
我尝试在mysql server 5.5中创建此函数,但从mysql中得到标准错误: 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 在第5行的“”附近Mysql创建函数没有';nt工作,mysql,sql,function,Mysql,Sql,Function,我尝试在mysql server 5.5中创建此函数,但从mysql中得到标准错误: 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 在第5行的“”附近 创建函数isInArea(p点,多边形) 返回INT(1) 确定性 开始 声明n INT默认值为0; 声明pX十进制(9,6); 声明pY十进制(9,6); 声明ls行字符串; 1分; 声明为十进制(9,6); 声明poly1Y十进制(9,6); 2分; 声明poly2X十进制(9,6); 声明
创建函数isInArea(p点,多边形)
返回INT(1)
确定性
开始
声明n INT默认值为0;
声明pX十进制(9,6);
声明pY十进制(9,6);
声明ls行字符串;
1分;
声明为十进制(9,6);
声明poly1Y十进制(9,6);
2分;
声明poly2X十进制(9,6);
声明poly2Y十进制(9,6);
声明i INT默认值为0;
声明结果INT(1)默认为0;
设置
pX=X(p);
设置
pY=Y(p);
设置
ls=外环(多边形);
设置
poly2=终点(ls);
设置
poly2X=X(poly2);
设置
poly2Y=Y(poly2);
设置
n=整数(ls);而我
设置
poly1=PointN(
ls,
(i+1)
);
设置
poly1X=X(poly1);
设置
poly1Y=Y(poly1);如果(
(
(
(poly1X:
每个存储程序都包含一个由SQL语句组成的主体。
此语句可以是由多个语句组成的复合语句
用分号(;)字符分隔的语句
如果使用mysql客户端程序定义存储程序
如果包含分号字符,则会出现问题。默认情况下,mysql
它本身将分号识别为语句分隔符,因此必须
临时重新定义分隔符以使mysql通过整个
将存储程序定义发送到服务器
分隔符//
创建函数isInArea(p点,多边形)
返回INT(1)
确定性
开始
声明n INT默认值为0;
声明pX十进制(9,6);
声明pY十进制(9,6);
声明ls行字符串;
1分;
声明为十进制(9,6);
声明poly1Y十进制(9,6);
2分;
声明poly2X十进制(9,6);
声明poly2Y十进制(9,6);
声明i INT默认值为0;
声明结果INT(1)默认为0;
设置
pX=X(p);
设置
pY=Y(p);
设置
ls=外环(多边形);
设置
poly2=终点(ls);
设置
poly2X=X(poly2);
设置
poly2Y=Y(poly2);
设置
n=NumPoints(ls);而i (您需要定义不同的分隔符。否则,定义将在代码中的第一个;
处结束
CREATE FUNCTION isInArea(p POINT, poly POLYGON)
RETURNS INT(1)
DETERMINISTIC
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(9, 6);
DECLARE pY DECIMAL(9, 6);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(9, 6);
DECLARE poly1Y DECIMAL(9, 6);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(9, 6);
DECLARE poly2Y DECIMAL(9, 6);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET
pX = X(p);
SET
pY = Y(p);
SET
ls = ExteriorRing(poly);
SET
poly2 = EndPoint(ls);
SET
poly2X = X(poly2);
SET
poly2Y = Y(poly2);
SET
n = NumPoints(ls); WHILE i < n DO
SET
poly1 = PointN(
ls,
(i + 1)
);
SET
poly1X = X(poly1);
SET
poly1Y = Y(poly1); IF (
(
(
(poly1X <= pX) && (pX < poly2X)
) || (
(poly2X <= pX) && (pX < poly1X)
)
) && (
pY > (poly2Y - poly1Y) * (pX - poly1X) / (poly2X - poly1X) + poly1Y
)
) THEN
SET
result = ! result; END IF;
SET
poly2X = poly1X;
SET
poly2Y = poly1Y;
SET
i = i + 1;
END WHILE;
RETURN result;
End;
DELIMITER //
CREATE FUNCTION isInArea(p POINT, poly POLYGON)
RETURNS INT(1)
DETERMINISTIC
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(9, 6);
DECLARE pY DECIMAL(9, 6);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(9, 6);
DECLARE poly1Y DECIMAL(9, 6);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(9, 6);
DECLARE poly2Y DECIMAL(9, 6);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET
pX = X(p);
SET
pY = Y(p);
SET
ls = ExteriorRing(poly);
SET
poly2 = EndPoint(ls);
SET
poly2X = X(poly2);
SET
poly2Y = Y(poly2);
SET
n = NumPoints(ls); WHILE i < n DO
SET
poly1 = PointN(
ls,
(i + 1)
);
SET
poly1X = X(poly1);
SET
poly1Y = Y(poly1); IF (
(
(
(poly1X <= pX) && (pX < poly2X)
) || (
(poly2X <= pX) && (pX < poly1X)
)
) && (
pY > (poly2Y - poly1Y) * (pX - poly1X) / (poly2X - poly1X) + poly1Y
)
) THEN
SET
result = ! result; END IF;
SET
poly2X = poly1X;
SET
poly2Y = poly1Y;
SET
i = i + 1;
END WHILE;
RETURN result;
End//
DELIMITER ;