我正在尝试在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的初学者,所以我不能在这里说出我在做什么错。 预先感谢!
答案 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”中运行。