Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql创建函数没有';nt工作_Mysql_Sql_Function - Fatal编程技术网

Mysql创建函数没有';nt工作

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); 声明

我尝试在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);
声明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 ;