【发布时间】:2015-10-11 10:59:30
【问题描述】:
我有一个函数返回表,它将多次调用的输出累积到另一个函数返回表。我想在返回结果之前对构建的表执行最终查询。目前我将其实现为两个函数,一个累积,一个执行最终查询,这很难看:
CREATE OR REPLACE FUNCTION func_accu(LOCATION_ID INTEGER, SCHEMA_CUSTOMER TEXT)
RETURNS TABLE("networkid" integer, "count" bigint) AS $$
DECLARE
GATEWAY_ID integer;
BEGIN
FOR GATEWAY_ID IN
execute format(
'SELECT id FROM %1$I.gateway WHERE location_id=%2$L'
, SCHEMA_CUSTOMER, LOCATION_ID)
LOOP
RETURN QUERY execute format(
'SELECT * FROM get_available_networks_gw(%1$L, %2$L)'
, GATEWAY_ID, SCHEMA_CUSTOMER);
END LOOP;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION func_query(LOCATION_ID INTEGER, SCHEMA_CUSTOMER TEXT)
RETURNS TABLE("networkid" integer, "count" bigint) AS $$
DECLARE
BEGIN
RETURN QUERY execute format('
SELECT networkid, max(count) FROM func_accu(%2$L, %1$L) GROUP BY networkid;'
, SCHEMA_CUSTOMER, LOCATION_ID);
END;
$$ LANGUAGE plpgsql;
如何在单个函数中优雅地做到这一点?
【问题讨论】:
-
请记住始终提供您的 Postgres 版本和必要的上下文 - 至少要提供
get_available_networks_gw(..)的确切结果类型
标签: postgresql parameter-passing aggregate-functions plpgsql dynamic-sql