以下PL / pgSQl脚本返回正确的行数,但输出是括号中逗号分隔值的列表,如下所示:
(,,)(,,)(,,)(,,)(,,)。 。 (,,)
CREATE OR REPLACE FUNCTION Get_Airports_in_Country(countryCode TEXT)
RETURNS TABLE(gid int, iko text, name text) AS $$
DECLARE
cntry_geom cntry02.the_geom%TYPE;
BEGIN
SELECT the_geom INTO cntry_geom from cntry02 where iso_2digit = $1;
RETURN QUERY
SELECT gid, iko, name
FROM airport
WHERE ST_Within(the_geom, cntry_geom);
END;
$$
LANGUAGE plpgsql;
SELECT Get_Airports_in_Country('CA');
我正在使用PostgreSQL 8.4。
知道我在这里缺少什么吗?
答案 0 :(得分:3)
可能看起来像这样:
CREATE OR REPLACE FUNCTION get_airports_in_country(text)
RETURNS TABLE(gid int, iko text, name text) AS $x$
DECLARE
-- $1 .. countryCode text -- just one way to comment
cntry_geom cntry02.the_geom%TYPE;
BEGIN
cntry_geom := c.the_geom FROM cntry02 c WHERE c.iso_2digit = $1;
RETURN QUERY
SELECT a.gid, a.iko, a.name
FROM airport a
WHERE ST_Within(a.the_geom, cntry_geom);
END;
$x$
LANGUAGE plpgsql;
呼叫:
SELECT * FROM get_airports_in_country('CA');
gid
,iko
,namereuse
作为OUT参数(在RETURNS TABLE
..中)时,您必须在函数体中限定相同的列名。 - > a.gid, a.iko, a.name
。 PostgreSQL 9.1对这些东西更严格,并抛出错误。本来可以帮到你,但是你可以使用8.4。DO
statement, introduced in PostgreSQL 9.0的“匿名代码块”。答案 1 :(得分:1)
你应该使用不同的查询
SELECT * FROM Get_Airports_in_Country('CA');