Postgresql Postgres-执行函数中的SQL状态:22004

Postgresql Postgres-执行函数中的SQL状态:22004,postgresql,plpgsql,Postgresql,Plpgsql,我试图创建一个函数来计算列中的行数。目标是将表和列作为参数传递给函数,并返回行数 功能是: CREATE OR REPLACE FUNCTION public.totalrecords(column_names text,table_names text) RETURNS bigint LANGUAGE 'plpgsql' AS $BODY$DECLARE total integer; BEGIN EXECUTE format('SELECT count(%s) in

我试图创建一个函数来计算列中的行数。目标是将表和列作为参数传递给函数,并返回行数

功能是:

CREATE OR REPLACE FUNCTION public.totalrecords(column_names text,table_names text)
    RETURNS bigint
    LANGUAGE 'plpgsql'

AS $BODY$DECLARE 
total integer;
BEGIN
    EXECUTE format('SELECT count(%s) into %I FROM %s', column_names,total,table_names);
    RETURN total;
END;$BODY$;

知道有人为什么不工作吗?非常感谢您的帮助。提前感谢

我假设这只是plpgsql的一个练习-正如@a_horse_和_no_name所指出的,您不需要函数来实现这一点。也就是说,只需将
放到
格式(…)
之外的total
中,就可以了。此外,不需要传递列名来获取表的
计数
,因此您可以将函数限制为单个参数,例如

CREATE OR REPLACE FUNCTION public.totalrecords(table_names text)
RETURNS bigint LANGUAGE 'plpgsql'
AS $BODY$
DECLARE total INTEGER;
BEGIN
 EXECUTE format('SELECT count(*) FROM %s', table_names) INTO total;
 RETURN total;
END;$BODY$;
例如:

CREATE TEMPORARY TABLE t (txt TEXT);
INSERT INTO t VALUES ('foo'),('bar');

SELECT * FROM totalrecords('t');


 totalrecords 
--------------
            2
(1 Zeile)

我假设这只是plpgsql的一个练习——正如@a_horse_和_no_name所指出的,您不需要函数来实现这一点。也就是说,只需将
放到
格式(…)
之外的total
中,就可以了。此外,不需要传递列名来获取表的
计数
,因此您可以将函数限制为单个参数,例如

CREATE OR REPLACE FUNCTION public.totalrecords(table_names text)
RETURNS bigint LANGUAGE 'plpgsql'
AS $BODY$
DECLARE total INTEGER;
BEGIN
 EXECUTE format('SELECT count(*) FROM %s', table_names) INTO total;
 RETURN total;
END;$BODY$;
例如:

CREATE TEMPORARY TABLE t (txt TEXT);
INSERT INTO t VALUES ('foo'),('bar');

SELECT * FROM totalrecords('t');


 totalrecords 
--------------
            2
(1 Zeile)

“计算列中的行数”-列没有行。表可以。实际上,您不需要函数“计算列中的行数”——列没有行。表可以。实际上不需要函数: