Синтаксическая ошибка при попытке создать хранимую процедуру в MySQL - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать хранимую процедуру в MySQL, чтобы проверить, находится ли данная ТОЧКА внутри 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

Это мой query:

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 ]

1 голос
/ 06 августа 2020

У вас есть необъявленная переменная 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
0 голосов
/ 06 августа 2020

Проблема заключалась в опечатке в названии одной из переменных и отсутствующем '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».

...