【发布时间】:2016-03-21 05:06:38
【问题描述】:
我创建了以下存储过程,它应该返回与多边形组有交集的所有位置名称(没有不同的...与 3 个多边形相交 => 3 个名称)
CREATE OR REPLACE FUNCTION get_name_without_distinct_by_polygon_group(start_time TIMESTAMP,
end_time TIMESTAMP,
polygon_group_id INTEGER)
RETURNS TABLE(name_name_name_name VARCHAR(12)) AS $$
DECLARE
name VARCHAR(12);
poly_id INTEGER;
BEGIN
FOR poly_id IN (SELECT polygon_id
FROM polygon_group_members
WHERE group_id = poly_id)
LOOP
FOR name IN (SELECT DISTINCT name
FROM location, polygons
WHERE location.timestamp BETWEEN start_time AND end_time
AND poly_id = polygons.id
AND st_intersects(location.polygon, polygons.polygon))
LOOP
RETURN NEXT name;
END LOOP;
END LOOP;
RETURN;
END;
$$ LANGUAGE SQL;
当我尝试创建此函数时,出现以下错误:
[42601] 错误:“VARCHAR”位置或附近的语法错误:356
基于 PostgreSQL declaration documentation 似乎没问题...
到目前为止我已经尝试过:
我把
name VARCHAR(12);改成了name location.mac%TYPE我把
name VARCHAR(12);改成了name RECORD我更改了声明的范围,然后在
poly_id INTEGER;上遇到了同样的错误我把
LANGUAGE SQL改成了postgressql我用谷歌搜索了它,根据任何示例/问题,我发现这个过程应该可以工作。
【问题讨论】:
-
There are no "stored procedures" in Postgres, just functions。您是否链接到 Postgres 9.1 文档,因为那是您的实际版本?
标签: sql postgresql plpgsql user-defined-functions stored-functions