我试图提取对应于特定日期和user_id的记录的计数,这些记录在数据库中没有对应于下一个较晚日期的user_id。这是我试图完成它的方式(使用plpgsql但不定义函数:
DO
$BODY$
DECLARE
a date[] := array(select distinct start_of_period from monthly_rankings where balance_type=2);
res int[] := '{}';
BEGIN
FOR i IN array_lower(a,1) .. array_upper(a,1)-1
LOOP
res := array_append(res,'SELECT COUNT(user_id) from (select user_id from monthly_rankings where start_of_period=a[i] except select user_id from monthly_rankings where start_of_period=a[i+1]) as b');
i:=i+1;
END LOOP;
RETURN res;
$BODY$ language plpgsql
字符串
我得到一个错误:
错误:RETURN在返回void的函数中不能有参数
第11行:返回res;
我是这个过程性语言的新手,无法发现为什么函数会返回void。我确实将值赋给了变量,而且我声明了空数组-而不是NULL。这是语法错误还是更严重的推理错误?
2条答案
按热度按时间snvhrwxg1#
DO
语句中**RETURN
。你必须使用CREATE FUNCTION
。可能是一个临时函数,请参阅:字符串
这包括最后一个合格的
start_of_period
。您可能希望像在PL/pgSQL代码中一样排除它。dfty9e192#
下面是同样的错误:
错误:RETURN在返回void的函数中不能有参数
因为
RETURNS VOID
和RETURN 2;
(INTEGER
)的类型在PL/pgSQL function中是不一样的,如下所示:字符串
所以,我设置
RETURNS INTEGER
如下所示,然后错误是solvd:型
或者,我没有返回任何有或没有
RETURN;
,如下所示,那么错误是solvd:型
或者:
型