Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres plpgsql返回表和值_Sql_Postgresql_Plpgsql - Fatal编程技术网

Postgres plpgsql返回表和值

Postgres plpgsql返回表和值,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,在一个plpgsql函数中,我将返回包含几列的表,以返回包含几行的表。但现在我还想返回一个单独的标量值。一个单独的标量值,加上几行。我该怎么做 例如 select count(*) from exampletable into individidual_scalar_value; select a, b, c from anothertable into several_rows limit 10; 可以对第一个表的计数使用子查询: select a, b, c, (select count(

在一个plpgsql函数中,我将返回包含几列的表,以返回包含几行的表。但现在我还想返回一个单独的标量值。一个单独的标量值,加上几行。我该怎么做

例如

select count(*) from exampletable into individidual_scalar_value;
select a, b, c from anothertable into several_rows limit 10;

可以对第一个表的计数使用子查询:

select a, b, c, (select count(*) from exampletable)
from anothertable
into several_rows
limit 10;

但请注意,一般来说,使用limitwithorderby是毫无意义的,因为您并没有告诉Postgres您想要实际选择哪10条记录。因此,在上面的查询中添加一个合理的ORDER BY子句以获得最佳结果。

是否计算每行的计数*?我假设它只计算一次并复制到每行,但解释输出或其他任何东西是否证明了这一点?@user779159是的,count子查询与外部查询不相关,因此应该计算一次,然后缓存。运行explain应该会发现这一点。当另一个表不返回任何行时,则不会返回标量值。你知道我怎么能用另一种方式做吗?可能没有参数?这似乎是一个奇怪的要求。为什么不让调用者处理没有返回行的情况呢?函数不能同时返回表和标量。你必须重新思考你想要完成什么。我可能建议使用两个不同的函数。@GordonLinoff它是否可以返回表的标量和json表示形式?我试着用类似于to_json的东西包装select语句,但没有成功,但我认为有一种方法。它可以作为复合类型或表中的一行返回两个值。这似乎是一个奇怪的要求。您应该进一步解释您真正想要做的事情。查询已经存在,并且正在返回多行,例如从plpgsql返回表或返回一些自定义类型。现在我想返回一个额外的标量值,例如表的计数。通常的方法是添加一个全新的函数来返回标量,并保持现有函数不变。但是由于这两个值—行和新标量—总是一起使用,我想看看有哪些选项可以从同一个函数返回它们。