使用PostgreSQL 9.3,OSX.
我把下面的函数组合在一起。
令人震惊的是,它工作正常,并返回一个基于位置的邮政编码单列表。
现在我想对这些结果进行for/循环,为每个邮政编码运行一个select查询,返回一个单个多列表。将下面的SELECT查询合并到这个函数中的最佳方法是什么?
SELECT "NPI" FROM doc
WHERE "Provider Business Mailing Address Postal Code"='<ZIPCODERESULTS FROM BELOW>';
CREATE FUNCTION get_npizips (text) RETURNS TABLE(a char(5)) AS '
DECLARE
-- Declare aliases for user input.
npi_id ALIAS FOR $1;
-- Declare a variable to hold the zipcode
zipcode varchar;
BEGIN
SELECT INTO zipcode substring(provider_nodes.address_postal_code for 5) FROM provider_nodes
WHERE provider_nodes.npi = npi_id;
RETURN QUERY SELECT zcta FROM zctas WHERE ST_DWithin(
geom,
(
SELECT geom
FROM zctas
WHERE zcta = zipcode
),
7 * 1.6 * 1000
);
END;
'LANGUAGE 'plpgsql';
1条答案
按热度按时间ftf50wuq1#
归结为这个简化的查询:
你的功能有很多缺点。如果你想保留它,我建议:
函数体使用美元引号。
不要引用语言名称
plpgsql
。不鼓励使用
ALIAS
。改用命名参数。不需要PL/pgSQL。一个普通的SQL函数可以完成这项工作。