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(*)
.
我正在尝试在 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(*)
.