尝试在MySQL中创建存储过程时出现语法错误

时间:2020-08-06 15:51:14

标签: mysql mysql-error-1064

我正在尝试在MySQL中创建一个存储过程,以检查给定的POINT是否在POLYGON内,但是出现错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 7

这是我的查询:

CREATE PROCEDURE IsInsidePolygon(
    IN polygon_coordinates VARCHAR(200),
    IN point_coordinates VARCHAR(200)
)
BEGIN
    DECLARE
        polygonData GEOMETRYCOLLECTION; 
    DECLARE 
        pointData POINT;
    SET
        polygonData = ST_GEOMFROMTEXT(
            CONCAT('POLYGON((', polygon_coordinates, '))')
        );
    SET
        pointData = ST_GEOFROMTEXT(
            CONCAT('POINT(', point_coordinates, ')')
        );
    SELECT
        post_id
    FROM
        wp_postmeta
    WHERE
        ST_CONTAINS(polygonData, pointData);
END;

我是SQL的初学者,所以我不能在这里说出我在做什么错。 预先感谢!

2 个答案:

答案 0 :(得分:1)

您有一个未声明的变量coordinates,该变量已被polygon_coordinates取代,并且在查询结束后缺少分号:

CREATE PROCEDURE IsInsidePolygon(
    IN polygon_coordinates VARCHAR(200),
    IN point_coordinates VARCHAR(200)
)
BEGIN
    DECLARE
        polygonData GEOMETRYCOLLECTION; 
    DECLARE 
        pointData POINT;
    SET
        polygonData = ST_GEOMFROMTEXT(
            CONCAT('POLYGON((', polygon_coordinates, '))')
        );
    SET
        pointData = ST_GEOFROMTEXT(
            CONCAT('POINT(', point_coordinates, ')')
        );
    SELECT
        post_id
    FROM
        wp_postmeta
    WHERE
        ST_CONTAINS(polygonData, pointData);
END

答案 1 :(得分:0)

问题在于该变量之一的命名错误,并且开头缺少'DELIMITER $$'。

DELIMITER $$

CREATE PROCEDURE IsInsidePolygon(
    IN polygon_coordinates VARCHAR(200),
    IN point_coordinates VARCHAR(200)
)
BEGIN
    DECLARE
        polygonData GEOMETRYCOLLECTION; 
    DECLARE 
        pointData POINT;
    SET
        polygonData = ST_GEOMFROMTEXT(
            CONCAT('POLYGON((', polygon_coordinates, '))')
        );
    SET
        pointData = ST_GEOFROMTEXT(
            CONCAT('POINT(', point_coordinates, ')')
        );
    SELECT
        post_id
    FROM
        wp_postmeta
    WHERE
        ST_CONTAINS(polygonData, pointData);
END

感谢大家的帮助!

Ps。该查询在“ phpmyadmin”中运行。