PL/pgSQL 函数计算 table 中的行数

PL/pgSQL function to count rows in a table

我正在尝试在 PL/pgSQL 中编写一个函数,它将计算学校名称为 "CAA" 的 table simulated_records 中的行数。我想将此数字保存在一个名为 count 的变量中,然后将其保存为 return。但是,我在 'SELECT' 或接近 'SELECT' 时不断收到错误消息。

这是我的代码:

CREATE OR REPLACE FUNCTION grades()returns integer AS $$
DECLARE 
count integer; --counts total number per school
BEGIN
count := SELECT count(school) FROM simulated_records WHERE school ='CAA';
return count;
END;
$$ 
LANGUAGE plpgsql;

使用 SELECT INTO 或将子选择括在括号中:

CREATE OR REPLACE FUNCTION grades()
  RETURNS integer AS
$func$
DECLARE 
count integer; --counts total number per school
BEGIN
count := (SELECT count(school)::int FROM simulated_records WHERE school ='CAA');
return count;
END
$func$  LANGUAGE plpgsql;

还要注意 count() returns bigint 这可能会导致类型不匹配,所以我添加了一个转换。

虽然这个例子很吵。直接使用query即可,或者使用更简单的sql函数:

CREATE OR REPLACE FUNCTION grades()
  RETURNS integer AS
$func$
SELECT count(school)::int FROM simulated_records WHERE school ='CAA';
$func$  LANGUAGE sql;

如果定义了 school NOT NULL 则使用 count(*).