我需要联合从不同查询聚合的表,并从存储过程返回整个结果集。这就是我的意思:
CREATE OR REPLACE FUNCTION invalid_pa() RETURNS TABLE (p_id int) AS $$
DECLARE
pl int[] := ARRAY(SELECT id FROM p.pl);
BEGIN
FOR i IN 1 .. array_upper(platforms, 1)
LOOP
--The query is SELECT id FROM dblink(connection_str(i), 'Some query')
--I need to union all the query above
--and return the unioned table
END LOOP;
END $$
LANGUAGE plpgsql;
如何以这种方式结合不同的结果集?
connection_str(i)
这是一个返回实际连接字符串的存储过程
答案 0 :(得分:2)
您发布的代码有些不妥之处,但忽略这些解决方案会有点像这样:
CREATE OR REPLACE FUNCTION invalid_pa() RETURNS TABLE (p_id int) AS $$
DECLARE
pl int[] := ARRAY(SELECT id FROM p.pl); -- ???
BEGIN
FOR i IN 1 .. array_upper(platforms, 1) -- platforms???
LOOP
RETURN QUERY SELECT id FROM dblink(connection_str(i), 'Some query');
END LOOP;
RETURN;
END $$ LANGUAGE plpgsql;
RETURN QUERY
向结果集添加零行或多行,最终RETURN
将整个结果集返回给调用者。实际上,所有dblink
来电的结果均为UNION
。