我有这个postgresql函数:
CREATE OR REPLACE FUNCTION public.test_q1()
RETURNS TABLE(schemaname text)
LANGUAGE plpgsql
AS $function$
BEGIN
return Query (select "content" from public.post where id='863550630468626253');
-- return Query (select count(*) from public.comments WHERE post_id='863550630468626253');
END
$function$
;
如何从该函数返回两个选择语句的结果?
是否可以从函数中返回两个select
语句的结果集,这样当我调用public.test_q1
时它将返回两个值,第一个结果集将是content
的值,而另一个第一个Select
和第二个返回值中的列将是计数?
答案 0 :(得分:1)
在一个查询中返回两个值?
select p."content",
(select count(*)
from public.comments c
where c.post_id = '863550630468626253'
) as num_comments
from public.post p
where p.id = '863550630468626253'
);
编辑:
我认为您不能保证函数的返回集中结果的顺序,但是您可以使用union all
返回这两个值。大概content
不是数字。因此,一种方法是强制转换值:
select p."content"
from public.post p
where p.id = '863550630468626253'
union all
select count(*)::text
from public.comments c
where c.post_id = '863550630468626253';
我相信实际上这将首先返回内容,然后返回计数。但是,我认为Postgres不能保证订购。