如何 return 计数函数 1 在函数 2 中的结果

How to return COUNT of function1's results in function2

我有一个函数,我们称它为 get_pants,returns psql 中的以下函数:

select * from get_pants ('calvin klein');
 size | length | color | type | price | discount | inventory | creation_timestamp 
-----+----------+------------+-------------+-------------+-------------+---------+--------------------
(0 rows)

我也可以在psql中统计get_pants的结果,就像这样

select count(*) from get_pants ('calvin klein');
 count 
-------
     0
(1 row)

但是当我将相同的代码放入一个函数中时,我们将其命名为foo,如下所示,为什么会出现语法错误

create or replace function foo ()
returns bigint as $$
begin
    return
        select count(*) from get_pants ('calvin klein');
end
$$ language 'plpgsql';
syntax error at or near "select"
LINE 4: return select count(*) from get_pants ('calvin.kl...
               ^

在PL/pgSQL中你需要先将结果存储在一个变量中:

create or replace function foo()
returns bigint 
as $$
declare
  l_count bigint;
begin
  select count(*) 
    into l_result 
  from get_pants ('calvin klein');
  return l_result;
end
$$ 
language plpgsql
stable;

但是您不需要 PL/pgSQL:

create or replace function foo()
  returns bigint 
as $$
  select count(*) 
  from get_pants ('calvin klein');
$$ 
language sql
stable;

请注意,语言名称是一个标识符,不应用单引号引起来。该语法已弃用,未来版本可能不会接受。