我有多个重复的表,我想从这些函数中创建。你可以帮我用这个代码编写一个函数吗?感谢。
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS VOID AS
$BODY$
BEGIN
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
END;
$BODY$
LANGUAGE ‘plpgsql‘;
答案 0 :(得分:2)
如果函数应返回结果集,则需要将其声明为returns table ()
或returns setof
你也不需要PL / pgSQL函数,一个简单的SQL函数可以做到并且效率更高:
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS table (id_member integer, id_service integer, amount numeric, date date, number_of_duplicates bigint)
$BODY$
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
$BODY$
LANGUAGE sql;
您没有向我们展示表evidence
的定义,所以我不得不猜测列的数据类型。您需要调整returns table (...)
部分中的类型以匹配表中的类型。
话虽如此:我会为这样的事情创建一个视图,而不是函数。
无关,但是:date
是列的可怕名称。一个是因为它也是一个关键字,但更重要的是它没有记录该列包含的内容:发布日期?到期日?截止日期?