PL / pgSQL控件结构非SETOF问题

时间:2013-07-10 12:17:26

标签: postgresql aggregate-functions

我有两个表,其中包含日期列(年,月,日以及三者的组合,称为“印章”)和相关值(avalue)。我需要我的函数来返回两个表之间的比率(在指定日期),在先前指定的限制日期之后返回一个固定值,如果日期在数据中不可用(但低于限制),它应该选择输入后的第一个可用日期。

这是我写的代码:

CREATE OR REPLACE FUNCTION myfunction(theyear int, themonth int, theday int) RETURNS real AS '
    DECLARE
        foo tablenamea%rowtype;
    BEGIN
        IF ((theyear >= 2000) AND (themonth >= 6)) OR (theyear > 2000) THEN
            RETURN 0.1;
        ELSE 
            FOR foo IN SELECT (a.avalue/b.avalue) FROM tablenamea AS a, tablenameb AS b
            WHERE a.stamp = b.stamp AND a.year = theyear AND a.month = themonth AND a.day >= theday ORDER BY a.year, a.month, a.day
            LOOP
                RETURN NEXT foo;
            END LOOP;
            RETURN;
        END IF;
    END;
' LANGUAGE plpgsql;

这一直给我这个错误:

cannot use RETURN NEXT in a non-SETOF function

1 个答案:

答案 0 :(得分:1)

它告诉你应该返回一个真实的,而不是foo(这是一行)。

可能会返回foo.somefield

另外,添加limit 1而不是for循环,因为我认为你只对第一行感兴趣。如果没有,请将其声明为返回,例如table (ratio real)并使用return query