Postgres plpgsql return table and value
在plpgsql函数中,我正在执行returns table,其中包含几列以返回具有几行的表。但是现在我还想返回一个单独的标量值。因此,一个单独的标量值加上几行。我该怎么办?
一个例子是
1 2
| SELECT COUNT(*) FROM exampletable INTO individidual_scalar_value;
SELECT a, b, c FROM anothertable INTO several_rows LIMIT 10; |
- 函数不能同时返回表和标量。您必须重新考虑要完成的工作。我可能会建议两个不同的功能。
-
@GordonLinoff可以返回表的标量和json表示吗?我尝试将select语句package到类似to_json的内容中,但这没有用,但是我认为有办法吗?
-
。 。它可以返回两个值作为复合类型或表中的一行。这似乎是一个奇怪的要求。您应该详细说明您的实际意图。
-
该查询已经存在并且正在返回几行(例如从plpgsql returns table或returns some_custom_type)。现在,我想返回一个额外的标量值(例如表的计数)。通常的方法是添加一个全新的函数以返回标量,并使现有函数保持不变。但是由于这两个值(行和新标量)将始终一起使用,所以我想看看有哪些选项可以从同一函数返回它们。
您可以对第一个表的计数使用子查询:
1 2 3 4
| SELECT a, b, c, (SELECT COUNT(*) FROM exampletable)
FROM anothertable
INTO several_rows
LIMIT 10; |
但是请注意,通常,不使用ORDER BY而不使用LIMIT是没有意义的,因为您没有告诉Postgres您实际上要选择哪10条记录。因此,在上面的查询中添加一个明智的ORDER BY子句以获得最佳结果。
- 是否为每行计算count(*)?我假设它只是被计算一次并复制到每一行,但是explain输出还是其他"证明"了这一点?
-
@ user779159是的,count子查询与外部查询不相关,因此应该计算一次,然后进行缓存。运行说明应该揭示这一点。
-
当anothertable不返回任何行时,则不返回标量值。你知道我该怎么做吗?也许用OUT参数?
-
这似乎是一个奇怪的要求。为什么不让调用者处理没有返回行的情况呢?