postgres 函数 returns 意外设置
postgres function returns unexpected set
我有一个简单的函数,它 return 是给定邮政编码的几何图形:
CREATE FUNCTION public._zip_geom(IN zip VARCHAR)
RETURNS SETOF geometry AS $$
SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = zip
$$ LANGUAGE sql;
我用 SELECT public._zip_geom('80302');
.
调用
当 return 定义为 SETOF geometry
时,我在 zip_polys
table 中得到 all 几何图形。当我将其更改为仅 geometry
时,我得到一个单一的几何图形,但不是与提供的邮政编码匹配的几何图形。
为什么会这样,我该如何编写一个函数来 return 正确的值?
您的函数参数与列名冲突(糟糕!),您可以尝试:
CREATE FUNCTION public._zip_geom(IN _omg VARCHAR)
RETURNS SETOF geometry AS $$
SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = _omg
$$ LANGUAGE sql;
_doh
或_zip
中的前缀下划线或多或少是参数的约定;列名不能以下划线开头,所以_omg
是无冲突的。
我有一个简单的函数,它 return 是给定邮政编码的几何图形:
CREATE FUNCTION public._zip_geom(IN zip VARCHAR)
RETURNS SETOF geometry AS $$
SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = zip
$$ LANGUAGE sql;
我用 SELECT public._zip_geom('80302');
.
当 return 定义为 SETOF geometry
时,我在 zip_polys
table 中得到 all 几何图形。当我将其更改为仅 geometry
时,我得到一个单一的几何图形,但不是与提供的邮政编码匹配的几何图形。
为什么会这样,我该如何编写一个函数来 return 正确的值?
您的函数参数与列名冲突(糟糕!),您可以尝试:
CREATE FUNCTION public._zip_geom(IN _omg VARCHAR)
RETURNS SETOF geometry AS $$
SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = _omg
$$ LANGUAGE sql;
_doh
或_zip
中的前缀下划线或多或少是参数的约定;列名不能以下划线开头,所以_omg
是无冲突的。