gpt4 book ai didi

postgresql - 当返回类型是表名时,为什么 PostgreSQL 函数返回空列而不是无行?

转载 作者:行者123 更新时间:2023-12-04 02:39:06 25 4
gpt4 key购买 nike

如果我创建一个查询函数的函数 f 我认为如果返回类型是表的名称而不是 RETURNS TABLE(id integer, name text )

CREATE TABLE users ( id integer, name text );

CREATE OR REPLACE FUNCTION f()
RETURNS users
AS $$
SELECT * FROM users
WHERE FALSE
$$
LANGUAGE SQL;

但是当函数中的查询返回零行时,我得到了奇怪的结果。

SELECT * FROM f();

预期结果

+------+--------+
| id | name |
|------+--------|
+------+--------+

实际结果

+--------+--------+
| id | name |
|--------+--------|
| <null> | <null> |
+--------+--------+

如果有更多的列,它们仍然都是null。如果函数中的查询返回任何行,那么它将按预期工作。如果我使用 RETURNS TABLE(...) 语法,则不会出现此行为。

有办法解决这个问题吗?

我正在使用 PostgreSQL 9.6

最佳答案

这与返回类型无关,但与您将函数声明为返回单行这一事实有关。

替换

RETURNS users

RETURNS SETOF users

您的函数将按预期工作。

正如您的函数一样,如果查询没有结果,它将返回 NULL,如果查询有多个结果行,它将返回第一行。

关于postgresql - 当返回类型是表名时,为什么 PostgreSQL 函数返回空列而不是无行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60222263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com